Quelle exception lancer lorsqu’un paramètre / dépendance important est manquant?

Prenez cette méthode

/** * @return List of group IDs the person belongs to * */ public List getGroups() { if (this.getId().equals("")) return null; } 

Je voudrais lancer une exception au lieu de retourner null, quelle est l’exception à lancer lorsqu’un paramètre / dépendance important n’a pas été défini?

J’utiliserais IllegalArgumentException si le paramètre / argument est contrôlé de l’extérieur ou IllegalStateException si la méthode est simplement appelée au mauvais moment (état). Dans votre cas spécifique, je pense que c’est le dernier. Une alternative (douteuse) est NullPointerException .

Cela devrait cependant être explicitement documenté dans les @throws pour que l’utilisateur en comprenne la raison.

Que diriez-vous d’ IllegalStateException ?

J’utiliserais une exception IllegalStateException car l’id est l’état du propriétaire. Si l’ID aurait passé en paramètre, une exception IllegalArgumentException serait correcte.

S’il n’est pas possible de s’assurer que l’id est toujours défini (en le demandant dans le constructeur, par exemple, où vous pouvez vérifier qu’un identifiant valide a été transmis), je pense que les autres suggestions pour lancer une exception IllegalStateException sont correctes. Mais il serait préférable d’essayer de faire en sorte que votre object ne puisse pas entrer dans cet état si possible

Au lieu de lancer une exception, vous devez simplement renvoyer une liste vide. Si une dépendance / paramètre n’est pas remplie, alors il n’y a aucun résultat. D’après les commentaires et le code postés, cela semble être le comportement attendu. Si l’identifiant est vide, alors il n’y a pas de groupe attaché, donc une liste vide.

Je créerais mon propre type d’exception en étendant Exception. De cette façon, les fonctions d’appel peuvent intercepter cette exception particulière et la gérer comme il convient. Notez que vous pouvez faire la même chose avec à peu près tout ce qui étend les exceptions, mais je préfère créer mes propres classes d’exception pour être très robuste dans ma gestion des exceptions. C’est bien sûr à vous de décider.