Wir haben damit begonnen, FindBugs zu verwenden und unsere Parameter mit den @Nonnullentsprechenden Anmerkungen zu versehen , und es ist großartig, früh im Zyklus auf Fehler hinzuweisen. Bisher haben wir diese Argumente weiterhin auf die nullVerwendung von Guava's checkNotNullüberprüft, aber ich würde es vorziehen, nullnur 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 @Nonnullsich nullWerte 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 nullHaken 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 @NonnullAnmerkung.
@Nonnull: als Vertragsspezifikation. Ich habe die defensiven Schecks hinter dem Vertrag entfernt und bis jetzt keine Probleme gehabt.