Ich bin mit der Klasse nicht klar java.lang.Void
auf Java. Kann jemand dies anhand eines Beispiels erläutern.
Was ist die Notwendigkeit der Void-Klasse in Java? [duplicate]
Giri
axtavt
Es enthält auch Void.TYPE
nützlich zum Testen des Rückgabetyps mit Reflektion:
public void foo() {}
...
if (getClass().getMethod("foo").getReturnType() == Void.TYPE) ...
-
+1 für den Hinweis, dass es in Reflektion verwendet wird, um den Typ einer Methode anzugeben, die keinen Rückgabewert hat.
– Stapler
28. Februar 2010 um 21:09 Uhr
-
Tatsächlich gibt es auch void.class (Kleinbuchstaben!), Das würde auch in Ihrem Beispiel perfekt funktionieren. Void wird dort also nicht benötigt.
– Whiskysierra
28. Februar 2010 um 23:27 Uhr
-
Tatsächlich ist Void.TYPE als public static final Class
TYPE = Class.getPrimitiveClass(“void”); Was selbst void.class ist. – Whiskysierra
28. Februar 2010 um 23:29 Uhr
-
@Willi: Ja, das vergesse ich
void.class
. Es tut uns leid.– axtavt
1. März 2010 um 0:44 Uhr
-
Tat
void.class
existieren in Java 1.1?– Kopffüßer
15. August 2011 um 11:52 Uhr
Angenommen, Sie möchten ein Generikum haben, das void für etwas zurückgibt:
abstract class Foo<T>
{
abstract T bar();
}
class Bar
extends Foo<Void>
{
Void bar()
{
return (null);
}
}
-
Das Problem ist, dass die Void-Klasse seit jdk 1.1 existiert.
– Römisch
28. Februar 2010 um 22:47 Uhr
-
Ich mag die Antwort von TofuBeer, aber Roman hat dort einen interessanten Punkt angesprochen.
– Whiskysierra
28. Februar 2010 um 23:30 Uhr
-
Es ist nicht ausschließlich dafür da, es war nur die erste Verwendung, die mir in den Sinn kam. Die Reflexionsantwort ist, warum es eingeführt wurde.
– TofuBier
1. März 2010 um 0:39 Uhr
-
Hatte diesen Anwendungsfall und war ratlos, als javac schrieb
This method must return a result of type Void
. Komme gerade zurück(null)
fiel mir nicht ein.– oschrenk
21. Mai 2012 um 15:26 Uhr
Tatsächlich gibt es einen pragmatischen Fall, in dem void.class wirklich nützlich ist. Angenommen, Sie müssen eine Anmerkung für Klassenfelder erstellen und die Klasse des Felds definieren, um Informationen darüber zu erhalten (z. B. wenn das Feld eine Aufzählung ist, um eine Liste möglicher Werte zu erhalten). In diesem Fall bräuchten Sie so etwas:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PropertyResourceMapper
{
public Class acceptedValues() default void.class;
}
so zu verwenden:
@PropertyResourceMapper(acceptedValues = ImageFormat.class, description = "The format of the image (en example, jpg).")
private ImageFormat format;
Ich habe dies verwendet, um einen benutzerdefinierten Serialisierer von Klassen in einem proprietären Format zu erstellen.
Arulraj
Von dem Java-Dokumentation:
public final class Void
extends Object
Die Void-Klasse ist eine nicht instanziierbare Platzhalterklasse, die einen Verweis auf das Klassenobjekt enthält, das das Java-Schlüsselwort void darstellt.
static Class<Void> TYPE
Das Klassenobjekt, das den primitiven Java-Typ void darstellt.
TYPE
public static final Class<Void> TYPE
Das Klassenobjekt, das den primitiven Java-Typ void darstellt.