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