javax.anotación: @Nullable vs @CheckForNull
¿Cuál es la diferencia entre los dos? Ambos parecen significar que el valor puede ser nulo y debe tratarse en consecuencia, es decir, verificarse si es nulo.
Actualización: Las dos anotaciones anteriores son parte de JSR-305 / FindBugs: http://findbugs.sourceforge.net/manual/annotations.html
3 answers
Creo que está bastante claro por el enlace que agregaste: si usas @CheckForNull
y el código que usa el valor no comprueba null
, FindBugs lo mostrará como un error.
FindBugs ignorará @Nullable
.
En la práctica, esta anotación es útil solo para sobreescribir una anotación general
NonNull
.
Use @CheckForNull
en los casos en que el valor siempre debe ser comprobado. Use @Nullable
donde null
podría estar bien.
EDITAR: parece que @CheckForNull
no está bien soportado por el momento, así que sugiero evitarla y usar @NonNull
(también vea ¿Qué anotación Java @NotNull debo usar?).
Otra idea sería ponerse en contacto directamente con los desarrolladores de FindBugs y preguntar su opinión sobre la inconsistencia en la documentación.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:18
@Nonnull
y @Nullable
son correctamente manejados por IntelliJ IDEA. FindBugs encontró el problema con @Nonnull
pero no los de @Nullable
y @CheckForNUll
. Los problemas detectados por IDEA y FindBugs están marcados con comentarios.
package com.db.icestation;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class test {
public @Nullable String nullable() {
return "";
}
public @Nonnull String nonnull() {
return null; // IDEA, findbugs
}
public @CheckForNull String checkForNull() {
return null;
}
public static void main(String[] args) {
System.out.println(new test().nullable().length()); // IDEA
System.out.println(new test().nonnull().length());
System.out.println(new test().checkForNull().length());
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-17 07:46:06
En IntelliJ la idea @javax.annotation.Nullable
está soportada por defecto y cualquier intento de desreferenciar @Nullable
argumentos o valores de retorno dará como resultado una advertencia.
@alexander-pavlov, Podría agregar @javax.annotation.CheckForNull
en la configuración de la inspección "Condiciones constantes y excepciones". Ir Archivo - > Configuración - > Inspecciones - > Errores probables- > Condiciones y excepciones constantes- > Configurar anotaciones.
Prefiero hacer esto porque @CheckForNull
tiene un significado más claro que @Nullable
como @lbalazscs mencionó en su respuesta anterior.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-20 09:14:57