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
.
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 ?
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
.
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
.
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.
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
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.