Puedo ver eso @Nullabley las @Nonnullanotaciones pueden ser útiles para prevenir NullPointerExceptions pero no se propagan muy lejos.
- La efectividad de estas anotaciones disminuye completamente después de un nivel de indirección, por lo que si solo agrega unas pocas, no se propagan muy lejos.
- Dado que estas anotaciones no se aplican correctamente, existe el peligro de asumir que un valor marcado con
@Nonnullno es nulo y, en consecuencia, no realiza comprobaciones nulas.
El siguiente código hace que un parámetro marcado con @Nonnullsea nullsin generar ninguna queja. Lanza un NullPointerExceptioncuando se ejecuta.
public class Clazz {
public static void main(String[] args){
Clazz clazz = new Clazz();
// this line raises a complaint with the IDE (IntelliJ 11)
clazz.directPathToA(null);
// this line does not
clazz.indirectPathToA(null);
}
public void indirectPathToA(Integer y){
directPathToA(y);
}
public void directPathToA(@Nonnull Integer x){
x.toString(); // do stuff to x
}
}
¿Hay alguna manera de hacer que estas anotaciones se apliquen más estrictamente y / o se propaguen más?
@Nonnullal llamar a un @Nonnullmétodo con una variable anulable. Por supuesto, la conversión con una anotación no es posible en Java 7, pero Java 8 agregará la capacidad de aplicar anotaciones al uso de una variable, incluidas las conversiones. Entonces, esto puede ser posible implementar en Java 8.
(@NonNull Integer) yes sintácticamente posible, pero un compilador no puede emitir ningún código de byte específico basado en la anotación. Para las afirmaciones de tiempo de ejecución, los métodos auxiliares pequeños son suficientes como se discutió en bugs.eclipse.org/442103 (por ejemplo, directPathToA(assertNonNull(y))), pero ten en cuenta que esto solo ayuda a fallar rápidamente. La única forma segura es realizar una comprobación nula real (más, con suerte, una implementación alternativa en la rama else).
@Nonnully de @Nullablequé está hablando, ya que hay múltiples molestias similares (consulte esta pregunta ). ¿Estás hablando de las anotaciones en el paquete javax.annotation?

@Nullableo@Nonnull, pero si valen la pena, es muy "probable que soliciten debate"