Я могу видеть , что @Nullableи @Nonnullаннотации могут быть полезными в предотвращении NullPointerExceptions , но они не распространяются очень далеко.
- Эффективность этих аннотаций полностью падает после одного уровня косвенного обращения, поэтому, если вы добавляете только несколько, они не распространяются очень далеко.
- Поскольку эти аннотации плохо соблюдаются, существует опасность предположить, что значение, отмеченное значком,
@Nonnullне является нулевым, и, следовательно, не выполнять нулевые проверки.
Приведенный ниже код заставляет параметр, отмеченный значком, не @Nonnullвызывать nullникаких жалоб. NullPointerExceptionПри запуске выдает ошибку.
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
}
}
Есть ли способ сделать эти аннотации более строгими и / или распространяться дальше?

@Nullableили@Nonnull, но если они того стоят, очень "вероятно, что они