Was ist die Notwendigkeit der Void-Klasse in Java? [duplicate]

Lesezeit: 2 Minuten

Benutzer-Avatar
Giri

Ich bin mit der Klasse nicht klar java.lang.Void auf Java. Kann jemand dies anhand eines Beispiels erläutern.

Benutzer-Avatar
axtavt

Es enthält auch Void.TYPEnü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.

Benutzer-Avatar
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.

1382010cookie-checkWas ist die Notwendigkeit der Void-Klasse in Java? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy