Ich habe eine Methode in Java gesehen, die wie folgt deklariert wurde:
void foo(@Nullable Object obj)
{ ... }
Was bedeutet @Nullable
hier? Bedeutet das, dass die Eingabe sein könnte null
?
Ohne die Anmerkung kann die Eingabe immer noch null sein. Ich denke, das ist nicht nur das?
java
annotations
user1508893
quelle
quelle
@Nullable
im Rahmen Ihrer Frage bereitgestellt ? Ist es Checker?Antworten:
Es wird deutlich, dass die Methode Nullwerte akzeptiert und dass Sie beim Überschreiben der Methode auch Nullwerte akzeptieren sollten.
Es dient auch als Hinweis für Code-Analysatoren wie FindBugs . Wenn eine solche Methode beispielsweise ihr Argument dereferenziert, ohne vorher nach null zu suchen, gibt FindBugs eine Warnung aus.
quelle
Diese Anmerkung wird üblicherweise zum Eliminieren verwendet
NullPointerExceptions
.@Nullable
sagt, dass dieser Parameter sein könntenull
. Ein gutes Beispiel für ein solches Verhalten finden Sie in Google Guice . In diesem einfachen Framework für die Abhängigkeitsinjektion können Sie erkennen, dass diese Abhängigkeit möglicherweise bestehtnull
. Wenn Sie versuchen würden zu bestehennull
ohne Anmerkung zu bestehen, würde sich das Framework weigern, seine Aufgabe zu erfüllen.Was mehr ist
@Nullable
, kann mit@NotNull
Anmerkungen verwendet werden. Hier finden Sie einige Tipps zur richtigen Verwendung. Die Codeüberprüfung in IntelliJ überprüft die Anmerkungen und hilft beim Debuggen des Codes.quelle
Verschiedene Werkzeuge können die Bedeutung von
@Nullable
unterschiedlich interpretieren . Zum Beispiel kann die Checker - Framework und FindBugs behandeln@Nullable
anders .quelle
Zugegeben, es gibt definitiv andere Denkweisen. In meiner Welt kann ich "Niemals eine Null passieren" nicht durchsetzen, weil ich es mit unkontrollierbaren Dritten wie API-Aufrufern, Datenbankdatensätzen, ehemaligen Programmierern usw. zu tun habe. Daher bin ich paranoid und defensiv in Ansätzen . Da Sie Java8 oder höher verwenden, gibt es einen etwas saubereren Ansatz als einen
if
Block.Sie können dort auch eine Ausnahme auslösen
.orElse
, indem Sie zu wechselnorElseThrow(() -> new Exception("Dont' send a null"))
.Wenn Sie @Nullable nicht verwenden möchten, wodurch funktional nichts hinzugefügt wird, benennen Sie den Parameter einfach mit,
mayBe...
damit Ihre Absicht klar ist.quelle