Différence entre void et Void en Java
Le type java.lang.Void
est analogue au type java.lang.Integer
. Le Void
s’enroule autour de void
et étend la classe d’objet, et le Void
n’a pas de valeurs possibles, ce qui rend le java.lang.Void
non instanciable.
Notre objectif est de trouver et de comprendre la différence entre Void
et void
dans la programmation Java. Nous apprendrons également comment et où nous pouvons utiliser Void
ou void
dans la programmation Java.
Différence entre void
et Void
en Java
La différence fondamentale entre les deux (Void
et void
) est que void
est un type primitif tandis que Void
, un type de référence qui hérite de Object
. Bien qu’aucun d’entre eux n’ait de valeurs possibles, les deux sont de types différents.
Le void
(tout en minuscules) est le type incorrect utilisé pour désigner l’absence de la valeur. En raison de l’absence de valeur dénotable, void
signifie qu’aucune valeur ne sera renvoyée par une fonction ou une méthode.
Par contre, java.lang.Void
retourne l’objet, on peut retourner null
pour faire les choses légalement, et c’est le seul moyen de le faire. Il n’est pas instanciable car il a un constructeur privé qui n’est pas accessible de l’extérieur.
Utiliser le void
et Void
en Java
Nous utilisons void
(tout en minuscules) lorsque nous voulons qu’une méthode ne renvoie aucune valeur. Comme dans l’exemple suivant, la méthode printMessage()
ne renvoie rien mais imprime un message à l’écran.
Exemple de code pour void
(Main.java
) :
public class Main {
static void printMessage() {
System.out.println("printMessage function just got executed!");
}
public static void main(String[] args) {
printMessage();
}
}
Nous pouvons utiliser Void
(capitaliser la première lettre) lors de la réflexion en programmation Java car il existe certaines situations où nous devons présenter le mot-clé Void
comme objet.
En même temps, nous ne sommes pas autorisés à créer l’objet de la classe Void
, et c’est pourquoi son constructeur est privé et n’est pas accessible de l’extérieur.
De plus, on ne peut pas hériter de la classe Void
car c’est une classe finale
. Cela nous amène à utiliser Void
en réflexion, où nous obtenons le type de retour d’une méthode sous la forme void
.
Exemple de code pour 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
}
}
Exemple de code pour Void
(TestOne.java
):
class TestOne {
public void Test() {}
}
Production:
True
False
On peut aussi obtenir le type de retour d’une méthode comme void
avec des génériques. Nous voulons écrire le code d’une classe générique qui peut renvoyer void pour quelque chose.
abstract class Foo<T> {
abstract T bar();
}
class Bar extends Foo<Void> {
Void bar() {
return (null);
}
}
Production:
True
False