Unterschied zwischen void und Void in Java
Der Typ java.lang.Void
ist analog zum Typ java.lang.Integer
. Das Void
umschließt void
und erweitert die Objektklasse, und das void
hat keine möglichen Werte, wodurch das java.lang.Void
nicht instanziierbar ist.
Unser Ziel ist es, den Unterschied zwischen Void
und void
in der Java-Programmierung zu finden und zu verstehen. Wir werden auch lernen, wie und wo wir Void
oder void
in der Java-Programmierung verwenden können.
Unterschied zwischen void
und Void
in Java
Der grundlegende Unterschied zwischen beiden (Void
und void
) besteht darin, dass void
ein primitiver Typ ist, während Void
ein Referenztyp ist, der vom Object
erbt. Obwohl keiner von ihnen mögliche Werte hat, sind beide von unterschiedlichem Typ.
void
(alles Kleinbuchstaben) ist der falsche Typ, der verwendet wird, um auf das Fehlen des Werts hinzuweisen. Da es keinen benennbaren Wert hat, bedeutet void
, dass von einer Funktion oder Methode kein Wert zurückgegeben wird.
Andererseits gibt java.lang.Void
das Objekt zurück, wir können null
zurückgeben, um Dinge legal zu tun, und es ist die einzige Möglichkeit, dies zu tun. Es ist nicht instanziierbar, da es einen privaten Konstruktor hat, auf den von außen nicht zugegriffen werden kann.
Verwendung von das void
und Void
in Java
Wir verwenden void
(alles Kleinbuchstaben), wenn wir möchten, dass eine Methode keinen Wert zurückgibt. Wie im folgenden Beispiel gibt die Methode printMessage()
nichts zurück, sondern gibt eine Nachricht auf dem Bildschirm aus.
Beispielcode für void
(Main.java
):
public class Main {
static void printMessage() {
System.out.println("printMessage function just got executed!");
}
public static void main(String[] args) {
printMessage();
}
}
Wir können Void
(den ersten Buchstaben groß schreiben) verwenden, während wir in der Java-Programmierung Reflexionen durchführen, da es einige Situationen gibt, in denen wir das Schlüsselwort void
als Objekt präsentieren müssen.
Gleichzeitig dürfen wir das Objekt der Klasse Void
nicht erzeugen, weshalb dessen Konstruktor privat ist und von aussen nicht zugegriffen werden kann.
Außerdem können wir die Klasse Void
nicht erben, da es sich um eine finale
Klasse handelt. Dies führt uns dazu, Void
in Reflektion zu verwenden, wo wir den Rückgabetyp einer Methode als void
erhalten.
Beispielcode für Void
(Main.java
):
public class Main {
public static void main(String[] args) throws SecurityException, NoSuchMethodException {
Class c1 = TestOne.class.getMethod("Test", (Class<?>[]) null).getReturnType();
System.out.println(c1 == Void.TYPE); // true
System.out.println(c1 == Void.class); // false
}
}
Beispielcode für Void
(TestOne.java
):
class TestOne {
public void Test() {}
}
Ausgabe:
True
False
Wir können den Rückgabetyp einer Methode auch mit Generika als void
erhalten. Wir wollen den Code für eine generische Klasse schreiben, die void für etwas zurückgeben kann.
abstract class Foo<T> {
abstract T bar();
}
class Bar extends Foo<Void> {
Void bar() {
return (null);
}
}
Ausgabe:
True
False