with - override annotation java
Uso de anotaciones anulables (3)
Vi un método en java declarado como:
void foo(@Nullable Object obj)
{ ... }
¿Cuál es el significado de @Nullable
aquí? ¿Significa que la entrada podría ser null
? Sin la anotación, la entrada todavía puede ser nula, así que supongo que no es solo eso.
Gracias
Deja claro que el método acepta valores nulos y que, si reemplaza el método, también debe aceptar valores nulos.
También sirve como una sugerencia para los analizadores de código como FindBugs . Por ejemplo, si un método de este tipo anula su argumento sin verificar primero el valor nulo, FindBugs emitirá una advertencia.
Diferentes herramientas pueden interpretar el significado de @Nullable
de @Nullable
diferente. Por ejemplo, el Framework Checker y FindBugs manejan @Nullable
differently .
Un elemento anotado con @Nullable
reclama el valor nulo es perfectamente válido para devolver (para métodos), pasar a (para parámetros) y mantener (para variables locales y campos).
Un elemento anotado con @NotNull
reclama que el valor nulo está prohibido devolver (para métodos), pasar a (para parámetros) y mantener (para variables locales y campos).
Existe una relación de covarianza-contravarianza entre @Nullable
y @NotNull
al anular / implementar métodos con declaración o parámetros anotados.
Anulación / implementación de métodos con una declaración anotada:
- La anotación
@NotNull
del método padre requiere la
@NotNull
anotación para el método de clase hijo. - Los métodos con la anotación
@Nullable
en el método principal pueden tener anotaciones@Nullable
o@NotNull
en el método de clase secundaria.
Anulación / implementación de métodos con parámetros anotados:
- La anotación
@Nullable
del parámetro en el método principal requiere la anotación@Nullable
para el parámetro del método de clase hijo. - Los métodos con la anotación
@NotNull
del parámetro en el método principal pueden tener anotaciones@Nullable
o@NotNull
(o ninguna de ellas) para el parámetro del método de clase secundaria.
Ejemplo:
@Nullable
public static UserContext getThreadUserContext() {
TransactionParms tp = TransactionParms.getBoundParms();
return (tp == null) ? null : tp.getUserContext();
}
Aquí el método getThreadUserContext
tiene que devolver una instancia de TransactionParms
. Bu esa instancia puede ser Null