Vi algún método en Java declarado como:
void foo(@Nullable Object obj)
{ ... }
¿Qué significa @Nullable
aquí? ¿Significa que la entrada podría ser null
?
Sin la anotación, la entrada aún puede ser nula, así que supongo que no es solo eso.
java
annotations
usuario1508893
fuente
fuente
@Nullable
en el contexto de su pregunta? ¿Es el corrector?Respuestas:
Deja en claro que el método acepta valores nulos y que si anula el método, también debe aceptar valores nulos.
También sirve como una pista para analizadores de código como FindBugs . Por ejemplo, si un método de este tipo desreferencia su argumento sin verificar primero nulo, FindBugs emitirá una advertencia.
fuente
Esta anotación se usa comúnmente para eliminar
NullPointerExceptions
.@Nullable
dice que este parámetro podría sernull
. Un buen ejemplo de este comportamiento se puede encontrar en Google Guice . En este marco de inyección de dependencias ligero, puede decir que esta dependencia podría sernull
. Si intenta pasarnull
sin una anotación, el marco se negaría a hacer su trabajo.Lo que es más,
@Nullable
podría usarse con@NotNull
anotaciones. Aquí puede encontrar algunos consejos sobre cómo usarlos correctamente. La inspección de código en IntelliJ verifica las anotaciones y ayuda a depurar el código.fuente
Diferentes herramientas pueden interpretar el significado de manera
@Nullable
diferente. Por ejemplo, Checker Framework y FindBugs se manejan de manera@Nullable
diferente .fuente
De acuerdo, definitivamente hay un pensamiento diferente, en mi mundo, no puedo imponer "Nunca pasar un nulo" porque estoy tratando con terceros incontrolables como llamadas de API, registros de bases de datos, antiguos programadores, etc., así que soy paranoico y defensivo en los enfoques . Como estás en Java8 o posterior, hay un enfoque un poco más limpio que un
if
bloque.También puede lanzar alguna excepción al cambiar
.orElse
aorElseThrow(() -> new Exception("Dont' send a null"))
.Si no desea utilizar @Nullable, que no agrega nada funcionalmente, ¿por qué no solo nombra el parámetro
mayBe...
para que su intención sea clara?fuente