Acabo de comenzar a usar la @NotNullanotación con Java 8 y obtener algunos resultados inesperados.
Tengo un método como este:
public List<Found> findStuff(@NotNull List<Searching> searchingList) {
    ... code here ...
}Escribí una prueba JUnit pasando el valor nulo para el argumento searchList. Esperaba que ocurriera algún tipo de error, pero sucedió como si la anotación no estuviera allí. ¿Es este comportamiento esperado? Por lo que entendí, esto fue para permitirle omitir la escritura del código de verificación nulo repetitivo.
Una explicación de lo que se supone que debe hacer exactamente @NotNull sería muy apreciada.

@NotNullEs solo una anotación. Las anotaciones no hacen nada por sí mismas. Necesitan un procesador de anotaciones en tiempo de compilación, o algo que lo procese en tiempo de ejecución.Respuestas:
@Nullabley@NotNullno hacer nada por su cuenta. Se supone que actúan como herramientas de documentación.La
@Nullableanotación le recuerda la necesidad de introducir una verificación NPE cuando:La
@NotNullAnotación es, en realidad, un contrato explícito que declara lo siguiente:no puedeno debe llevar a cabo valor nulo.Por ejemplo, en lugar de escribir:
Puedes usar:
Además, a
@NotNullmenudo es verificado por Validadores de restricción (por ejemplo, en primavera e hibernación).La
@NotNullanotación no realiza ninguna validación por sí sola porque la definición de la anotación no proporciona ningunaConstraintValidatorreferencia de tipo.Para más información ver:
fuente
Optionalpodría usarse en lugar de@Nullvalores de retorno y sobrecarga de métodos en lugar de@Nullen listas de parámetros: dolszewski.com/java/java-8-optional-use-cases* The annotated element must not be {@code null}. * Accepts any type.y creo que la palabra debe reemplazarse con debería pero nuevamente depende de cómo la leas. Definitivamente, sería bueno tener algunas aclaraciones másnullpero se permitiría, está usando la anotación incorrecta. El término no implica que esté validado. Sin embargo, una pista de que no está validado no estaría de más. Si desea agregar validación automática, puede usar algunas herramientas externas. Por ejemplo, el IDE IntelliJ tiene soporte incorporado para inyectar cheques nulos.Como se mencionó anteriormente
@NotNull, no hace nada por sí solo. Una buena forma de usarlo@NotNullsería usarlo conObjects.requireNonNullfuente
this.bar = Objects.requireNonNull(bar, "bar must not be null");Para hacer
@NotNullactivarlo necesitas Lombok:https://projectlombok.org/features/NonNull
Siga: ¿Qué anotación Java @NotNull debería usar?
fuente
SO @NotNull solo es una etiqueta ... Si desea validarlo, debe usar algo como hibernate validator jsr 303
fuente
Si está utilizando Spring, puede forzar la validación anotando la clase con
@Validated:Más información disponible aquí: validación Javax @NotNull uso de anotaciones
fuente
Hago esto para crear mi propia anotación de validación y validador:
ValidCardType.java(anotación para poner en métodos / campos)Y, el validador para activar la verificación
CardTypeValidator.java:Puedes hacer algo muy similar a comprobar
@NotNull.fuente
Para probar la validación de su método en una prueba, debe envolverlo como proxy en el método @Before.
Con MethodValidationProxyFactory como:
}
Y luego, agregue su prueba:
fuente