IllegalArgumentException ou NullPointerException pour un paramètre nul ?

J'ai une méthode setter simple pour une propriété et null n'est pas approprié pour cette propriété particulière. J'ai toujours été déchiré dans cette situation : dois-je lancer une IllegalArgumentException, ou un NullPointerException ? D'après les javadocs, les deux semblent appropriés. Existe-t-il une sorte de norme comprise? Ou est-ce juste une de ces choses que vous devriez faire ce que vous préférez et les deux sont vraiment corrects ?

请先 登录 后评论

5 réponses

Greg Hurlman

Il semble qu'un IllegalArgumentException soit nécessaire si vous ne voulez pas que null soit une valeur autorisée, et le NullPointerException serait levée si vous essayiez d'utiliser une variable qui s'avère être null.

请先 登录 后评论
Jeremy Privett

S'il s'agit d'une méthode setter et que null lui est transmis, je pense qu'il serait plus logique de lancer un IllegalArgumentException. Un NullPointerException semble avoir plus de sens dans le cas où vous essayez d'utiliser réellement le null.

Donc, si vous l'utilisez et que c'est null, NullPointer. S'il est transmis et qu'il s'agit de null, IllegalArgument.

请先 登录 后评论
jassuncao

Si vous choisissez de lancer un NPE et que vous utilisez l'argument dans votre méthode, il peut être redondant et coûteux de rechercher explicitement une valeur nulle. Je pense que la VM le fait déjà pour vous.

请先 登录 后评论
Allain Lalonde

Je ne peux pas être plus d'accord avec ce qui est dit. Échouez tôt, échouez vite. Très bon mantra d'exception.

La question de savoir quelle exception lancer est principalement une question de goût personnel. Dans mon esprit, IllegalArgumentException semble plus spécifique que d'utiliser un NPE car il me dit que le problème venait d'un argument que j'ai passé à la méthode et non d'une valeur qui aurait pu être générée lors de l'exécution de la méthode.

Mes 2 centimes

请先 登录 后评论
Community

En général, un développeur ne doit jamais lancer une NullPointerException. Cette exception est levée par le runtime lorsque le code tente de déréférencer une variable dont la valeur est null. Par conséquent, si votre méthode veut explicitement interdire null, au lieu de simplement avoir une valeur null qui lève une NullPointerException, vous devez lever une IllegalArgumentException.

请先 登录 后评论
  • 1 abonnés
  • 0 favoris,561 Feuilleter
  • Mike Stone posée à 2023-03-17 12:44