Que dois-je retourner si le type de retour d’une méthode est Void? (Pas nul!)

En raison de l’utilisation de Generics en Java, j’ai dû implémenter une fonction ayant le type de retour Void :

 public Void doSomething() { //... } 

et le compilateur exige que je retourne quelque chose . Pour l’instant je ne fais que retourner null , mais je me demande si c’est une bonne pratique de codage …

J’ai aussi essayé Void.class , void , Void.TYPE , new Void() , pas de retour du tout, mais tout cela ne fonctionne pas du tout. (Pour des raisons plus ou moins évidentes) (Voir cette réponse pour plus de détails)

  • Alors qu’est-ce que je suis censé retourner si le type de retour d’une fonction est Void ?
  • Quelle est l’utilisation générale de la classe Void ?

EDIT: Juste pour vous épargner les downvotes: je pose des questions sur V ‌oid, pas v ‌oid. La classe Void , pas le mot-clé réservé void .

Alors, qu’est-ce que je suis censé retourner si le type de retour d’une fonction doit être Void ?

Utilisez return null . Void ne peut pas être instancié et est simplement un espace réservé pour le type de void Class .

Quel est le but du Void ?

Comme noté ci-dessus, c’est un espace réservé. Void est ce que vous obtiendrez si vous utilisez, par exemple, la reflection pour examiner une méthode avec un type de retour de type void . (Techniquement, vous récupérerez la Class .) Elle a d’autres utilisations le long de ces lignes, comme si vous voulez paramétrer un Callable .

En raison de l’utilisation de génériques en Java, j’ai fini par devoir implémenter cette fonction

Je dirais que quelque chose peut être génial avec votre API si vous deviez implémenter une méthode avec cette signature. Examinez attentivement la possibilité de faire ce que vous voulez (vous pouvez peut-être fournir plus de détails dans une question de suivi différente?). Je suis un peu méfiant, car cela ne s’est produit “que grâce à l’utilisation de génériques”.

Il n’y a aucun moyen d’instancier un Void, donc la seule chose que vous pouvez retourner est null.

return null est la voie à suivre.

Pour expliquer pourquoi les autres suggestions que vous avez données ne fonctionnent pas:

Void.class et Void.TYPE pointent vers le même object et sont de type Class , pas de Void .

C’est pourquoi vous ne pouvez pas retourner ces valeurs. new Void() serait de type Void mais ce constructeur n’existe pas. En fait, Void ne possède pas de constructeur public et ne peut donc pas être instancié: vous ne pouvez jamais avoir d’object de type Void exception du null polymorphe.

J’espère que cela t’aides! 🙂

Si, pour des raisons obscures, vous DEVEZ utiliser ce type, alors retourner null semble être une option judicieuse, car je suppose que la valeur de retour ne sera pas utilisée de toute façon.
Le compilateur vous forcera à retourner quelque chose de toute façon.
Et cette classe ne semble pas avoir de constructeur public, donc le nouveau Void () n’est pas possible.