NullPointerException Java Correction

Signaler
Messages postés
47
Date d'inscription
lundi 20 juillet 2009
Statut
Membre
Dernière intervention
13 mars 2013
-
Messages postés
47
Date d'inscription
lundi 20 juillet 2009
Statut
Membre
Dernière intervention
13 mars 2013
-
Bonjour,

je suis sur la qualimétrie, j'ai remarqué le fait d'utiliser cette exeception "NullPointerException "pouvait générer des problèmes.

Je ne comprend pas pourquoi ?

Par exemple dans cette ligne de code :
if (value == null) throw new NullPointerException("La valeur à ajouter est nul.");


Que peut il se passe ? La machine virtuelle peux planter ?

Si je remplace NullPointerException par IllegalArgumentExeption , est ce que ce serai mieux ? On m'a dit de remplacer par IllegalArgumentExeption quelle différence vas t il se passer ?

Merci d'avance , je sais je pose beaucoup trop de question

5 réponses

Messages postés
5348
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 mars 2020
95
Salut,

La différence est simple tu n'auras pas la même exception générée ....
Dans ton cas NullPointerException est adaptée mais IllegalArgumentException ne l'est pas...
Dans tous les cas une exception serait levée mais en aucun cas la jvm va planter, si elle plante pour une exception c'est grave, par contre limite ton application peut planter pour une non gestion des exceptions générées...

exemple d'exception :

public void setValue(final String value) throws NullPointerException, IllegalArgumentException {
  if(value == null)
    throw new NullPointerException("La valeur à ajouter est null");
  else if(value.trim().equals(""))
    throw new IllegalArgumentException("La valeur à ajouter est invalide");
  //....
}


utilisation :

try {
  setValue(null); // lève l'exception NullPointerException
  //setValue(""); // lève l'exception IllegalArgumentException
} catch(NullPointerException e) {
  e.printStackTrace();
  // traitement si null
} catch(IllegalArgumentException e) {
  e.printStackTrace();
  // traitement si la valeur n'est pas valide
}




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
47
Date d'inscription
lundi 20 juillet 2009
Statut
Membre
Dernière intervention
13 mars 2013

J'utilise en fait un plugins sous eclipse "PMD" qui corrige mon code, et quand je lève l'exéception NullPointerException . il me mets


Avoid throwing a NullPointerException - it's confusing because most people will assume that the
virtual machine threw it. Consider using an IllegalArgumentException instead; this will be
clearly seen as a programmer-initiated exception.

Je vois toujours pas pourquoi il est préferable de lever IllegalArgumentException comme exeption au lieu de NullPointerException ?

Merci
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
3
Salut,

une NPE est causée lors de l'appel d'une méthode sur un objet null (levée par la JVM) et non pour la vérification d'une valeur (levée par la méthode avec une IllegalArgumentException).
De plus un catch d'une NPE est déconseillé car ça montre une erreur de codage comme ArrayIndexOfBoundsException (sauf qq exceptions comme NumberFormatException).
Messages postés
5348
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 mars 2020
95
Salut,

Certes kirua mais le NullPointerException n'est pas forcément causé par le fournisseur du service, cas pour les systèmes API ou tu n'as pas la maitrise directe des arguments que l'on te passe et honnêtement lever un IllegalArgumentException alors que le dev utilisant ton API passe une variable nulle je trouve ça moyen (ça n'engage que moi) et il risque de ne pas comprendre pourquoi je lui lève cette exception...
Bon après en fonction de l'environnement et des choix de conception niveau gestion des exceptions limite je veux bien comprendre pourquoi ils préfèrent ça ...





------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
47
Date d'inscription
lundi 20 juillet 2009
Statut
Membre
Dernière intervention
13 mars 2013

Ok merci bien compris