2010-03-25 3 views
47

Prenez cette méthodeQuelle exception à lancer lorsqu'un paramètre/dépendance important est manquant?

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

Je voudrais revenir jeter exception au lieu null, ce qui est l'exception à jeter quand un paramètre important/dépendance n'a pas été réglée?

+6

Ce code déclenchera un NPE si 'getID()' renvoie null. Il vaut mieux utiliser 'if (" ".equals (this.getId())) ...' –

+0

J'ai défini cela dans une classe abstraite et il y a un try catch à l'intérieur, et retournera une chaîne vide en cas d'échec. – Pentium10

Répondre

71

Je voudrais utiliser IllegalArgumentException si le paramètre/argument est contrôlé de l'extérieur, ou IllegalStateException si la méthode est juste appelée à un mauvais moment (état). Dans votre cas particulier, je pense que c'est le dernier. Une alternative (douteuse) est NullPointerException.

Ceci devrait cependant être explicitement documenté dans le @throws afin que l'utilisateur comprenne la raison.

+0

Le contexte de la question est en effet limité. Pour autant que je puisse voir, l'ISE est le meilleur choix. J'ai également explicitement déclaré que, donc je ne vois pas comment c'est mauvais :) – BalusC

+0

Y at-il une magie comment puis-je mettre à jour la section des commentaires dans Eclipse pour regénérer automatiquement @params manquant et ajouter la section @throws? Peut-être un raccourci? – Pentium10

+0

Désolé, je ne sais pas. Il sera automatiquement ajouté pour les exceptions non exécutables (lorsque vous générez/mettez à jour la clause 'throws'), mais pas pour les exceptions d'exécution. – BalusC

2

Je voudrais utiliser une exception IllegalStateException car l'ID est l'état du propriétaire. Si l'identifiant aurait passé en paramètre, une exception IllegalArgumentException serait correcte.

0

Je créerais mon propre type Exception en étendant Exception. De cette façon, les fonctions d'appel peuvent attraper cette exception particulière et la gérer avec élégance le cas échéant. Notez que vous pouvez faire la même chose avec à peu près tout ce qui étend Exception, mais je préfère créer mes propres classes Exception pour que je puisse être très robuste dans ma gestion des exceptions. Ceci est, bien sûr, à vous.

+0

Pourquoi réinventer la roue? IllegalArgumentException est faite exactement pour un argument illégal. –

+0

Cela dépend du nombre de types d'arguments illégaux que vous voulez piéger. J'aime étendre Excpetion, ou dans ce cas IllegalArgumentException juste pour avoir une classe Exception spécifique pour traiter les différents types de conditions que je veux traiter. Il rend le traitement des exceptions plus facile et plus robuste, à mon humble avis. -Jay – Jay

2

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 ID valide a été passé), je pense que les autres suggestions sont corrects. Mais il serait préférable d'essayer et de s'assurer que votre objet ne peut pas entrer dans cet état en premier lieu si possible

1

Au lieu de lancer une exception, vous devriez simplement retourner une liste vide. Si une dépendance/paramètre n'est pas rencontré, alors il n'y a pas de résultats. À partir des commentaires et du code affiché, il semble que ce soit le comportement attendu. Si l'identifiant est vide, aucun groupe n'est attaché, donc une liste vide.

Questions connexes