source sonar online linter espaƱol descargar code bugs java annotations static-analysis findbugs

java - online - sonar code analyzer



javax.annotation: @Nullable vs @CheckForNull (3)

¿Cuál es la diferencia entre los dos? Ambos parecen querer decir que el valor puede ser nulo y debe tratarse en consecuencia, es decir, debe verificarse si es nulo.

Actualización: las dos anotaciones anteriores son parte de JSR-305 / FindBugs: http://findbugs.sourceforge.net/manual/annotations.html


@Nonnull y @Nullable son manejados correctamente por IntelliJ IDEA. FindBugs encontró el problema con @Nonnull pero se perdió los de @Nullable y @CheckForNUll . Los problemas que fueron 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()); } }


En IntelliJ Idea @javax.annotation.Nullable es compatible por defecto y cualquier intento de desreferenciar argumentos @Nullable o devolver valores dará como resultado una advertencia.

@ alexander-pavlov, puede agregar @javax.annotation.CheckForNull en la configuración de la inspección "Condiciones constantes y excepciones". Vaya a Archivo-> Configuración-> Inspecciones-> Errores probables-> Condiciones constantes y excepciones-> Configure las anotaciones.

Prefiero hacer esto ya que @CheckForNull tiene un significado más claro que @Nullable como @lbalazscs mencionado en su respuesta anterior.


Creo que está bastante claro desde el enlace que agregaste: si usas @CheckForNull y el código que usa el valor no marca null , FindBugs lo mostrará como un error.

FindBugs ignorará @Nullable .

En la práctica, esta anotación solo es útil para anular una anotación general no NonNull .

Use @CheckForNull en los casos en que el valor siempre debe estar marcado. Use @Nullable donde null podría estar bien.

EDITAR: parece que @CheckForNull no está bien soportado en este momento, por lo que sugiero evitarlo y usar @NonNull (también ver ¿Qué anotación @NotNull Java debería usar? ). Otra idea sería ponerse en contacto directamente con los desarrolladores de FindBugs y pedirles su opinión sobre la incoherencia en la documentación.