Wie kann man die Findbugs Thema "Null-Wert garantiert ist, aufgelöst werden" NP_GUARANTEED_DEREF

Hallo ich habe einige code, wird gemeldet, dass die NP_GUARANTEED_DEREF Ausgabe von Findbugs.
Nun ein Blick auf mein code, den ich nicht ganz verstehen, was ist falsch mit ihm, kann jeder jeden schlagen, was das problem ist.

public void test() {
  String var = "";
  int index = 2;
  if (index == -1) {
    var = String.class.getName();
    if (var.length() == 0) {
      var = null;
    }
  } else {
    var = Integer.class.getName();
    if (var.length() == 0) {
      var = null;
    }
  }
  if (var == null) {//FINBUGS reports on this line NP_GUARANTEED_DEREF
    /*
     * There is a statement or branch that if executed guarantees that a value
     * is null at this point, and that value that is guaranteed to be
     * dereferenced (except on forward paths involving runtime exceptions).
     */
    throw new NullPointerException("NULL");
  }
}

Nun die Bohrung in der Fehler in Findbugs es betont die zwei Aufgaben zu var = null; als Ursache für den Fehler, aber ich verstehe nicht ganz, warum. Es ist nicht so, ich bin tatsächlich etwas zu tun mit der var Objekt bin ich gerade dabei ein Null-check. Das Beispiel stammt aus dem echten Produktions-code, aber ohne, dass etwas war nicht erforderlich, den Fehler zu reproduzieren. Was ich mich Frage, ob dies ein false-positive ist oder nicht. Und wenn nicht, was wäre eine angemessene Korrektur.

Hier ist der link zu dem Findbugs Bug Detail: http://findbugs.sourceforge.net/bugDescriptions.html#NP_GUARANTEED_DEREF

[UPDATE] Nach Erhalt ein feedback über dieses Problem habe ich nun angemeldet, dies als False Positive in die Findbugs Bugtracker auf Sourceforge, der link ist https://sourceforge.net/tracker/?func=detail&aid=3277814&group_id=96405&atid=614693

Gespräch über das problem wird weiterhin da.

Hast du durch Zufall haben var.equals(null) vor? Sind Sie sicher, dass Sie re-run Findbugs auf die Datei (was ich normalerweise tun ist, nenne ich das "sauber bug-Marker").
Ja, ich bin sicher, dass ich erneut Findbugs, und Nein es war nie var.equals(null) wenn es war, dass es einfach nachvollziehbar ist. Als jzd sagte, es sieht nicht falsch. Wenn ich mehr Bestätigung, dass es nicht falsch Aussehen, werde ich wahrscheinlich nach einem Fehler (False positive) mit Findbugs
Ich sehe. Kann ich bestätigen, die gleiche FB-Verhalten auf meinem computer. Sieht schon seltsam. Was komisch ist, dass wenn Sie ersetzt throw new NullPointerException mit throw new RuntimeException der Fehler-marker verschwinden würden.
Nun ich denke ich verstehe, was Sie gemeint habe. Der Wortlaut der Nachricht ist nicht exakt, aber Sie sind Warnung Sie gegen eine NPE. Ich vermute, Sie betrachten explizit wirft NPE eine schlechte Praxis ist.
ha interessant finden, Grzegorz, ich kann bestätigen, Ihre finden. So ist es die NPE, dass ist das Problem hier. Danke. Wenn Sie setzen, dass in einer tatsächlichen Antwort kann ich markieren Sie es als die Antwort, die ich suchte.

InformationsquelleAutor AGrunewald | 2011-03-16

Schreibe einen Kommentar