tutorial - notacion en java
Uso de anotaciones anulables (4)
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 .
Esta anotación se usa comúnmente para eliminar NullPointerExceptions
. @Nullable
se suele decir que este parámetro puede ser null
. Un buen ejemplo de tal comportamiento se puede encontrar en Google Guice . En este marco de inyección de dependencia ligero, usted dice que esta dependencia podría ser null
. Si intentara pasar null
y sin anotación, el marco se negaría a hacer su trabajo.
Además, @Nullable
podría usarse con la anotación @NotNull
. Aquí puedes find algunos consejos sobre cómo usarlos adecuadamente. La inspección de código en IntelliJ comprueba las anotaciones y ayuda a depurar el código.
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