J'utilise Sonar et j'ai obtenu ce genre de violation pour une tranquillité d'esprit dans mon code:
Correctness - Possible null pointer dereference
Quelqu'un at-il connaissance de cette règle dans findbugs? J'ai cherché beaucoup mais je ne trouve pas un bon exemple de code (en Java) décrivant cette règle. Malheureusement, le site findbugs ne contenait aucun exemple de code ni aucune bonne description de cette règle.
Pourquoi cette violation apparaît-elle?
Il dit ici
NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH)
Il existe une branche d'instruction qui, si elle est exécutée, garantit qu'une valeur nulle sera déréférencée, ce qui générerait une exception NullPointerException lors de l'exécution du code. Naturellement, le problème peut être que la branche ou l'instruction est infaisable et L'exception de pointeur null ne peut jamais être exécutée, ce qui dépasse les capacités de FindBugs.
Si vous aviez posté du code, il serait plus facile de répondre.
EDIT Je ne vois pas beaucoup de documentation, mais voici un exemple ! J'espère que cela t'aides!
un exemple de code est quelque chose comme ça.
String s = null ;
if (today is monday){
s = "Monday" ;
else if (today is tuesday){
s = "Tuesday" ;
}
System.out.println(s.length()); //Will throw a null pointer if today is not monday or tuesday.
D'accord
Voici deux exemples simples: Le premier donne un: Déréférence de pointeur null possible
1. Error
ArrayList a = null;
a.add(j, PointSet.get(j));
// now i'm trying to add to the ArrayList
// because i'm giving it null it gives me the "Possible null pointer dereference"
2. No Error
ArrayList a = new ArrayList<>();
a.add(j, PointSet.get(j));
// adding elements to the ArrayList
// no problem
Simple?
J'ai eu ce problème avec le code suivant: -
BufferedReader br = null;
String queryTemplate = null;
try {
br = new BufferedReader(new FileReader(queryFile));
queryTemplate = br.readLine();
} catch (FileNotFoundException e) {
// throw exception
} catch (IOException e) {
// throw exception
} finally {
br.close();
}
Ici, br
BufferedReader peut être null
dans br.close()
. Cependant, il ne peut s'agir que de null
si new BufferedReader()
échoue, auquel cas nous lançons les exceptions pertinentes.
C'est donc un faux avertissement. Les documents Findbugs
mentionnent le même: -
This may lead to a NullPointerException when the code is executed.
Note that because FindBugs currently does not Prune infeasible
exception paths, this may be a false warning.
En langage simple, si une valeur de variable est affectée à la valeur null et que vous essayez d'y accéder avec une méthode intégrée telle que add/get. Ensuite, la question de déréférencement du pointeur null vient avec SONAR. Parce qu'il y a des modifications pour cela, il devient nul et lève une exception pointeur null. Essayez de l'éviter si possible.
Fichier ex Fichier = null; file.getName (); jettera "Déréférence de pointeur null possible"
Cela peut ne pas arriver directement comme mentionné dans l'exemple, cela peut être involontaire.