Я вижу, что аннотации @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
}
}
Есть ли способ сделать эти аннотации более строго принудительными и/или распространяться дальше?