L'interfaccia com.google.common.base.Function
(da Google Guava) definisce apply
come:ingresso @Nullable in funzione di interfaccia Google Guava innesca FindBugs avvertimento
@Nullable T apply(@Nullable F input);
Il metodo ha il seguente nota javadoc:
@throws NullPointerException if {@code input} is null and this function does not accept null arguments
.
FindBugs lamenta mia implementazione della funzione:
private static final class Example implements Function<MyBean, String> {
@Override
@Nullable
public String apply(@Nullable MyBean input) {
if (null == input) {
throw new NullPointerException();
}
return input.field;
}
}
con un ad alta priorità avvertimento:
NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE, Priorità: alta
ingresso deve essere non nullo, ma è segnato come nullable
Questo parametro viene sempre utilizzato in un modo che richiede che non sia null, ma il parametro è annotato esplicitamente come Nullable. O l'uso del parametro o dell'annotazione è sbagliato.
La mia funzione non supporta null
ingressi e viene generata un'eccezione se questo è il caso. Se ho capito bene, FindBugs considera questo come un requisito per non null.
Per me sembra una contraddizione: l'input è @Nullable ma il metodo @throws NullPointerException quando è nullo. Mi sto perdendo qualcosa?
L'unico modo per eliminare l'avviso che è possibile vedere è la soppressione manuale. (Il codice Guava è fuori dal mio controllo, ovviamente).
Chi ha torto sull'utilizzo dell'annotazione @Nullable, di FindBugs, di Guava o di me?
Stai dicendo che accetterai nulla nella firma, e quindi si sta rifiutando * * un valore nullo nel corpo. Sembra che tu abbia frainteso lo scopo di '@ Nullable'. –
L'unico motivo per cui ho aggiunto '@ Nullable' per i parametri di input è che è ciò che definisce l'interfaccia' Function'. Comunque, ho rimosso l'annotazione di '@ Nullable' dal parametro come suggerito da @Xaerxess ma FindBugs continua a lamentarsi. – vitaly