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
@NotNulldel método padre requiere la
@NotNullanotación para el método de clase hijo. - Los métodos con la anotación
@Nullableen el método principal pueden tener anotaciones@Nullableo@NotNullen el método de clase secundaria.
Anulación / implementación de métodos con parámetros anotados:
- La anotación
@Nullabledel parámetro en el método principal requiere la anotación@Nullablepara el parámetro del método de clase hijo. - Los métodos con la anotación
@NotNulldel parámetro en el método principal pueden tener anotaciones@Nullableo@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