Entdecken Sie NullPointerException Fehler mit FindBugs

9

Wenn ich FindBugs für diesen Code ausführe, meldet er KEINE Probleme.

%Vor%

Während hier findet es Problem wie erwartet:

%Vor%

Warum schlägt es im ersten Fall fehl?

    
alex2k8 07.05.2010, 21:28
quelle

6 Antworten

1

Ich stimme alex2k8 zu. Wahrscheinlich liegt dies am _closed-Datenelement. Seine Initialisierung ist irrelevant, solange sie nicht als final deklariert ist. Statische Analyse hat keine generischen Mittel zur Bestimmung der tatsächlichen Werte von _closed zur Laufzeit, und keine Software kann es jemals tun (es ist äquivalent zu dem Anhalten Problem ).

    
Eyal Schneider 07.05.2010 23:00
quelle
1

Ich habe FindBugs Quellen genommen und nach

gesucht %Vor%

Zwei Dateien gefunden:

  1. BuildUnconditionalParamDerefDatabase.java
  2. InkonsistenteAnnotationen.java

Beide betrachten nur "bedingungslose Parameter-Dereferenzierung".

Sieht so aus, als ob FindBugs NICHT so nützlich ist, um Nullzeigerprobleme zu finden: - (

P.S.

%Vor%     
alex2k8 08.05.2010 14:19
quelle
0

Sie möchten @CheckForNull anstelle von @Nullable

verwenden     
Michael Donohue 07.05.2010 22:03
quelle
0
  

@Nullable nur für diejenigen Parameter, Methoden oder Felder, die NULL sein dürfen.

Scheint so, als erlaubst du Nullwerte für die Textvariable. Sie sollten wahrscheinlich stattdessen @NonNull verwenden.

Bearbeiten

Ich habe es selbst ausprobiert und das gleiche Ergebnis erzielt.

Der Text in der Findbugs-Fehlermeldung (aus der zweiten Methode, die den Nullpointer-Fehler ergibt) sagt:

  

Dieser Parameter wird immer in einer Weise verwendet, die erfordert, dass er nicht null ist. Der Parameter wird jedoch explizit als nullwertannotiert. Entweder ist die Verwendung des Parameters oder der Anmerkung falsch.

Meine Annahme wäre, dass, da es sich nicht um einen finalen Parameter handelt, FindBugs keine Annahmen über die Wert von _closed, da Sie es zu einem späteren Zeitpunkt ändern können. Ich habe sogar versucht, die Methode _closed variabel innerhalb der m1-Methode zu definieren, und sie meldet es immer noch nicht als Fehler.

    
Jarle Hansen 07.05.2010 21:36
quelle
0
  

edu.umd.cs.findbugs.annotations.Nullable   [Ziel] Feld, Methode, Parameter

     

Das mit Anmerkungen versehene Element könnte unter bestimmten Umständen null sein. Im Allgemeinen bedeutet dies, dass Entwickler die Dokumentation lesen müssen, um festzustellen, wann ein Nullwert akzeptabel ist und ob nach einem Nullwert gesucht werden muss. FindBugs behandelt die mit Anmerkungen versehenen Elemente so, als ob sie keine Anmerkung hätten.

     

In der Praxis ist diese Anmerkung nur zum Überschreiben einer übergreifenden NonNull-Annotation nützlich.

Ссылка

    
Tim Bender 10.05.2010 19:04
quelle
-1

Führen Sie JavaLint aus - ich vermute, dass es Ihnen das sagen wird

%Vor%

im ersten Beispiel ist nicht erreichbar. Da es unerreichbar ist, schätze ich FindBug nicht, dass es eine NullPointerException

verursachen könnte     
DrewM 07.05.2010 21:43
quelle

Tags und Links