我不理解NonNull注释应该如何帮助。假设我有以下代码:
void noNullArg(@NonNull Object o)
{
// stuff
}
如果我这样做,会收到一个关于'o'可能为null的警告。
void foo()
{
Object o = null;
noNullArg(o);
}
但是,如果我这样做,却没有收到任何警告。
void sendNull()
{
// Pass null and violate the annotation
foo(null);
}
void foo(Object o)
{
noNullArg(o);
}
这是一个相当微不足道的情况,无法被检测出来。更糟糕的是,编译器似乎认为如果设置了@NonNull,则检查null是不必要的,但很明显并非如此(它说条件始终为false)。