我可以看到 @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
}
}
有没有办法使这些注释更严格地执行和/或进一步传播?
原文由 Mike Rylander 发布,翻译遵循 CC BY-SA 4.0 许可协议
简短回答:我想这些注释只对您的 IDE 有用,可以警告您潜在的空指针错误。
正如“Clean Code”一书中所说,您应该检查公共方法的参数并避免检查不变量。
另一个好的技巧是从不返回空值,而是使用 空对象模式。