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