我不知道NonNull注释应该如何帮助.所以,让我说我有这个:
void noNullArg(@NonNull Object o) { // stuff }
如果我这样做,我会收到关于"o"如何为空的警告.
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是不必要的,当它显然不是时(它表示条件总是为假).