2016-07-07 24 views
5

Così ho voluto mettere alla prova Void tipo allora ho scritto questo semplice programma:Perché non è possibile utilizzare Void come tipo di ritorno per il metodo principale

package ehsan; 

public class NumTest { 
    public static Void main(String[] args) { 
     System.out.println("Hello, World!"); 
     return null; /* The compiler forced me to do so. I just can't realize what is the point in returning in Void type!? */ 
    } 
} 

Così ora quando voglio per la compilazione, il compilatore si lamenta:

main method must return a value of type void 

Perché il compilatore non può vedere che sto restituendo nulla e sto usando Void?

+5

'Void' e' void' non sono gli stessi. – Eran

+3

Poiché lo standard definisce la firma del metodo principale come 'public static void main (String ... args)'. Autoboxing/Unboxing non ha nulla a che fare con le firme dei metodi. Non è possibile inserire automaticamente una firma. – tkausl

+3

Void non è un wrapper per il vuoto – Eran

risposta

4

È necessario utilizzare void (minuscolo v) non Void oggetto. L'oggetto Void non otterrà l'autoboxing come ad es. int/Integer, vedere Java Language Specification per un elenco di oggetti autoboxing.

Void non è un wrapper per void, è solo un oggetto che ha un nome molto simile in modo che possa essere utilizzato in luoghi in cui è necessario specificare un tipo di ritorno (come ad esempio Callable<T>), è solo a scopo di documentazione e per risolvere il problema alcune classi generiche restituiscono tipi.

Il secondo caso d'uso è in riflessione (quando si desidera verificare il valore di ritorno di una funzione void, si otterrà Void.TYPE).

linea corretto è:

+0

Quindi l'unico uso di 'Void' sta nello specificare i tipi generici? (Ci scusiamo per le mie nuove domande :) –

+0

Di solito, ci sono altri casi d'uso relativi alla riflessione, come è scritto nei documenti 'Void': * La classe Void è una classe di segnaposto non affidabile per contenere un riferimento all'oggetto Class che rappresenta il Vuoto parola chiave Java.* –

2

Void è un tipo di classe, in modo compilatore si aspetta di tornare un valore per esso. Dovresti usare void con la lettera minuscola.

La causa del vostro errore:

main method must return a value of type void

è dovuto alla regola che metodo main deve sempre tornare void - che è una parola chiave non è un tipo di classe Java.

1

devi usare void invece di Void

Ti piace questa:

1

Typo error.

È void non Void

È accaduto che Void è una classe in Java. Da Documenti

The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.

+0

Nessun errore di errore di battitura, sto solo testando 'Void' :) –

+0

La mia eclissi che dice Questo metodo deve restituire un risultato di tipo Void –

+0

Si noti che' void' differisce da 'Void' .... –