NullPointerException Java Correction

cs_Taz1984 Messages postés 47 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 13 mars 2013 - 4 nov. 2009 à 10:52
cs_Taz1984 Messages postés 47 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 13 mars 2013 - 4 nov. 2009 à 13:52
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
A voir également:

5 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
4 nov. 2009 à 11:21
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
0
cs_Taz1984 Messages postés 47 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 13 mars 2013
4 nov. 2009 à 11:37
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
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
4 nov. 2009 à 12:03
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).
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
4 nov. 2009 à 12:11
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Taz1984 Messages postés 47 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 13 mars 2013
4 nov. 2009 à 13:52
Ok merci bien compris
0
Rejoignez-nous