Wir haben damit begonnen, FindBugs zu verwenden und unsere Parameter mit den @Nonnull
entsprechenden Anmerkungen zu versehen , und es ist großartig, früh im Zyklus auf Fehler hinzuweisen. Bisher haben wir diese Argumente weiterhin auf die null
Verwendung von Guava's checkNotNull
überprüft, aber ich würde es vorziehen, null
nur an den Rändern zu suchen - Stellen, an denen der Wert eingegeben werden kann, ohne auf z null
. B. eine SOAP-Anfrage geprüft worden zu sein .
// service layer accessible from outside
public Person createPerson(@CheckForNull String name) {
return new Person(Preconditions.checkNotNull(name));
}
...
// internal constructor accessed only by the service layer
public Person(@Nonnull String name) {
this.name = Preconditions.checkNotNull(name); // remove this check?
}
Ich verstehe, dass @Nonnull
sich null
Werte nicht blockieren .
Da FindBugs jedoch darauf hinweist, dass irgendwo ein Wert von einem nicht markierten Feld in ein markiertes Feld übertragen wird @Nonnull
, können wir uns nicht darauf verlassen, dass diese Fälle abgefangen werden (was auch immer der Fall ist), ohne dass diese Werte null
überall überprüft werden müssen, wo sie herumgereicht werden das System? Bin ich naiv, wenn ich dem Tool vertrauen und diese ausführlichen Überprüfungen vermeiden möchte?
Fazit: Obwohl es sicher erscheint, den zweiten null
Haken unten zu entfernen , ist es eine schlechte Praxis?
Diese Frage ist vielleicht zu ähnlich wie Sollte man auf null prüfen, wenn er nicht null erwartet , aber ich frage speziell in Bezug auf die @Nonnull
Anmerkung.
@Nonnull
: als Vertragsspezifikation. Ich habe die defensiven Schecks hinter dem Vertrag entfernt und bis jetzt keine Probleme gehabt.