Ho notato eclissi JDT uses void
as a primitive type. Questo può essere considerato corretto?In Java, si può "annullare" essere considerato un tipo primitivo?
risposta
Trovo che, in casi come questo, non si possa battere andando alle Specifiche del linguaggio Java. È abbastanza chiaro che lo void
non è un primitivo.
Prima di tutto, void
non è nello list of primitive types.In seguito, il JLS afferma esplicitamente:
il linguaggio di programmazione Java non permette un "cast vuoto" — vuoto non è un tipo http://java.sun.com/docs/books/jls/third_edition/html/statements.html#5989 (sottolineatura mia)
Inoltre, void
appare nello list of keywords, non nell'elenco di valori letterali.
che hai visto quello che hai fatto era explained nicely di Michael Borgwardt.
Quindi, per rispondere al tuo titolo: no. In Java, void
non può essere considerato un primitivo. Per rispondere al tuo corpo: sì, il codice JDT di Eclipse è corretto per quello che deve fare.
Personalmente, sono sconcertato perché i moderni linguaggi di programmazione non hanno seguito la convenzione nerdcore di nominare "void" usando un acronimo ricorsivo, ad es. VINAT: VINAT non è un tipo. :) –
Nessun vuoto non è un tipo primitivo. È semplicemente una parola chiave per indicare che un metodo non ha alcun valore di ritorno. Il più vicino si può venire è la classe java.lang.Void, che dal Javadocs è descritto come:
La classe Void è un istanziabili classe segnaposto per contenere un riferimento all'oggetto classe che rappresenta il Java parola chiave non valida.
La presenza nel JDT è semplicemente la creazione degli AST per il codice. Se si guarda la descrizione del valore del campo negli stessi documenti, si dice:
Codice tipo per il tipo primitivo "vuoto". Si noti che "void" è speciale in che i suoi unici usi legittimi sono come un tipo di ritorno del metodo e come un tipo letterale .
Grazie per la risposta. +1 –
come so, annullare il suo non un tipo primitivo. Tuttavia hanno questa costante nel tipo di classe per ragioni di riflessione!
dal tuo link:
nota che "vuoto" è speciale in quanto i suoi solo gli usi legittimi sono come un tipo di ritorno metodo e come un tipo letterale.
Si noti inoltre che questa è una classe interessata con nodi AST, ovvero la sintassi del linguaggio Java.
Fondamentalmente, quando si modella la sintassi del linguaggio, void
appare in alcune delle stesse posizioni dei tipi primitivi, quindi quando si rappresenta la sintassi come una classe Java, è necessario classificarlo in modo simile.
qui è quello scritto in javadoc si fa riferimento:
Codice tipo per il tipo primitivo "vuoto". Si noti che "void" è speciale in quanto i suoi unici usi legittimi sono come un tipo di ritorno del metodo e come un tipo letterale.
Prestare attenzione alla parola in grassetto. Penso che questo spieghi tutto.
Un tipo primitivo speciale è comunque un tipo primitivo. Quindi la parola "speciale" non risolve nulla, vero? –
Sono d'accordo con * Johannes Schaub - litb *. –
Da Java 6 API docs:
pubblico booleana isPrimitive() - Determina se l'oggetto Class specificato rappresenta un tipo primitivo.
Returns: true se e solo se questa classe rappresenta un tipo primitivo
ho controllato per me stesso:
void.class.getName() // void (OK)
void.class.isPrimitive() // true (??)
Void.class.getName() // java.lang.Void (OK)
Void.class.isPrimitive() // false (OK)
E 'bug? So che il vuoto è non tipo primitivo (penso sia solo parola chiave), ma perché void.class.isPrimitive() restituisce true?
modifica: Penso che dovrebbe essere chiarito, quindi ho suggerito java: doc bug 7019906. A mio parere dovrebbe essere:
pubblico isPrimitive booleana() - Determina se l'oggetto Class specificato rappresenta un tipo primitivo o una parola chiave vuoto.
Restituisce: true se e solo se questa classe rappresenta un tipo primitivo o una parola chiave void.
Non lo definirei un bug, ma sì, può essere molto fuorviante. E il JLS non spiega molto bene questo caso. –
- 1. "OpenCV" è considerato non può essere trovato
- 2. Perché NSTextView non può essere considerato un riferimento debole?
- 3. Oggetto o tipo primitivo
- 4. tipo Java non può essere risolto
- 5. Java: copia array di tipo non primitivo
- 6. Blocco su un tipo primitivo
- 7. convertire il vettore di tipo primitivo C++ nell'array primitivo di tipo java
- 8. Iniezione di un tipo primitivo in AngularJS
- 9. Java Double vs double: tipo classe vs tipo primitivo
- 10. Perché `str` è un tipo primitivo?
- 11. Android: non può invocare toString() sul tipo int primitivo
- 12. Numero intero come tipo primitivo
- 13. In che modo un thread creato da un'app può essere considerato un'app diversa da ContentProvider dell'app?
- 14. Come verificare se il tipo è primitivo
- 15. "int non può essere dereferenziato" in Java
- 16. Perché eclipse dice che null è un tipo primitivo?
- 17. Trovare l'ordine più alto 1 in un primitivo Java
- 18. HttpServlet non può essere risolto con un tipo .... si tratta di un bug in eclissi?
- 19. .execute non può essere risolto in un tipo - AsyncTask (Android)
- 20. MacOS può essere eseguito in un ambiente di tipo VMWare?
- 21. Un tipo può essere un tipo di riferimento e un tipo di valore allo stesso tempo?
- 22. Perché si dice "Bitmap non può essere risolto in un tipo" in questo caso?
- 23. Può "questo" essere mai nullo in Java?
- 24. Python: un oggetto può essere un suo tipo?
- 25. GoogleCloudMessaging non può essere risolto con un tipo
- 26. Definizioni di "primitivo", "tipo di valore", "struct", "classe", "wrap" in Java e C#
- 27. Modifica il valore di un tipo di dati primitivo spostato
- 28. È possibile creare un nuovo tipo di dati primitivo in Java
- 29. IllegalArgumentException: Tipo non può essere nullo
- 30. Come convertire da stringa a un tipo primitivo o tipi wrapper Java standard
Mi chiedo se "void" sia per niente un tipo? O è semplicemente un segnaposto sintattico? Dalla descrizione del capitolo 4 del langspec, suona certamente come "void" non è affatto un tipo. –
JDT non è JLS. –
Ho confermato il mio sospetto. 'void' è, pedanticamente parlando, non un tipo. –