Que dois-je retourner si le type de retour d'une méthode est Vide? (Pas nulle!)

en raison de l'utilisation de Génériques En Java j'ai fini par avoir à mettre en œuvre une fonction ayant Void comme type de retour:

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 à tous. (Pour des raisons plus ou moins évidentes) (voir cette réponse pour plus de détails)

  • alors que dois-je 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 parle de V oid, pas v oid. La classe Void , et non le mot-clé réservé void .

111
demandé sur Community 2009-03-24 12:31:54

5 réponses

alors que dois-je retourner si le type de retour d'une fonction doit être Void ?

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

Quel est l'intérêt de Void ?

Comme indiqué ci-dessus, c'est un espace réservé. Void est ce que vous obtiendrez si vous, par exemple, utiliser la réflexion pour regarder une méthode avec un type de retour void . (Techniquement, vous récupérerez Class<Void> .) Il a d'autres usages assortis le long de ces lignes, comme si vous voulez paramétrer un Callable<T> .

en raison de l'utilisation de génériques en Java j'ai fini par avoir à mettre en œuvre cette fonction

je dirais que quelque chose peut être funky avec votre API si vous avez besoin d'implémenter une méthode avec cette signature. Examinez soigneusement s'il y a une meilleure façon de faire ce que vous voulez (peut-être Pouvez-vous fournir plus de détails dans une autre question de suivi?). Je suis un peu méfiant, car cela est seulement venu "en raison de l'utilisation de génériques".

100
répondu John Feminella 2016-08-26 01:54:45

il n'y a aucun moyen d'instancier un vide, donc la seule chose que vous pouvez retour est nul.

23
répondu Jon Bright 2009-03-24 09:39:35

return null est le chemin à parcourir.

18
répondu Bombe 2009-03-24 09:36:44

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

Void.class et Void.TYPE pointent vers le même objet et sont du type Class<Void> , et non du type 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 n'a aucun constructeur public et ne peut donc pas être instancié: vous ne pouvez jamais avoir aucun objet de type Void sauf le polymorphe null .

Espérons que cette aide! :- )

17
répondu Martijn 2009-06-03 10:38:18

si, pour des raisons obscures, vous devez utiliser ce type, alors retourner null semble être une option raisonnable, puisque 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 new Void () n'est pas possible.

0
répondu PhiLho 2009-03-24 09:38:19