Abbiamo iniziato a utilizzare FindBugs e ad annotare i nostri parametri con @Nonnull in modo appropriato, e funziona ottimo per segnalare bug all'inizio del ciclo. Finora abbiamo continuato a controllare questi argomenti per null usando checkNotNull di Guava, ma preferirei controllare null solo ai bordi - luoghi in cui il valore può entrare senza essere stato controllato per null , ad esempio, una richiesta SOAP.
// 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?
}
Capisco che @Nonnull non blocchi null valori stessi.
Tuttavia, dato che FindBugs indica ovunque un valore viene trasferito da un campo non marcato a uno marcato @Nonnull , non possiamo dipendere da esso per catturare questi casi (che fa) senza dover controllare questi valori per null ovunque vengano passati in giro nel sistema? Sono ingenuo per voler fidarmi dello strumento ed evitare questi controlli dettagliati?
In conclusione: Mentre sembra sicuro rimuovere il secondo controllo null di seguito, è una cattiva pratica?
Questa domanda è forse troppo simile a Si dovrebbe verificare null se non si aspetta nulla , ma sto chiedendo specificamente in relazione all'annotazione @Nonnull .