Warum geben Findbugs redundante Null-Checks für eine Methode, aber nicht für die andere an

8

Ich habe die @Nonnull- und @Nullable-Annotationen zu Methoden verwendet, um anderen Programmierern (und mir selbst!) einen Hinweis darauf zu geben, was eine Methode zurückgeben kann. Ich entschied mich schließlich, Findbugs tatsächlich auf einer Klasse (IntelliJ - FindBugs-IDEA v1.0.1) zu betreiben, und ich verstehe das Verhalten nicht, das ich sehe. Die Dokumentation hat auch nicht geholfen.

Sagen wir, ich habe den folgenden Beispielcode:

%Vor%

Findbugs kennzeichnet die Rückgabeanweisung von myFunc () mit "Redundant nullcheck of value als nicht-null", ist aber mit myFunc2 () zufrieden.

Wird erwartet, dass Findbugs diese anders sieht? (Link zur Dokumentation wäre willkommen) Missverstehe ich die Verwendung von @Nonnull auf Methoden vollständig?

[Bearbeiten]

Nach einigen Recherchen habe ich entschieden, dass die org.jetbrains @Contract Annotation (mit Vertragsverletzungen in Fehler geändert) wird besser meinen Bedürfnissen entsprechen. Danke Guillaume F. für deine Hilfe!

    
KathyA. 26.01.2017, 22:10
quelle

1 Antwort

1

Sie müssen verstehen, was redundanter Null-Check bedeutet. Wenn Findbugs Ihnen diese Warnung gibt, bedeutet dies, dass Sie zweimal eine Nullprüfung durchgeführt haben, und das zweite Mal ist nicht erforderlich. Welches Ihrem Beispiel entspricht.

Im ersten Code führt new String("foo") eine implizite Nullprüfung durch, weil new String(null) eine Ausnahme auslöst. Daher wird dieses neue String-Objekt implizit auf Nicht-Null überprüft. Dann machen Sie einen weiteren @Nonnull Check, während Sie die Methode verlassen. Findbugs sieht dies und gibt Ihnen eine Warnung.

In Ihrem zweiten Code gibt es kein solches Steuerelement, da Sie eine rohe Zeichenfolge zurückgeben und die @Nonnull -Prüfung nur einmal durchführen. Alles ist gut.

Vielleicht möchten Sie stattdessen edu.umd.cs.findbugs.annotations.NonNull verwenden. Dieser wird Findbugs nur darauf hinweisen, dass Sie ein Ergebnis ungleich null haben möchten, ohne einen echten Check zu haben.

Wenn Sie Maven verwenden:

%Vor%

Ссылка

Welche @NotNull Java-Anmerkung sollte ich verwenden?

    
Guillaume F. 27.01.2017 05:19
quelle

Tags und Links