我在代码中已经看到了这里有
的声明@ParametersAreNotNullByDefault
public class A
{
private String id;
public A(final String id)
{
this.id = id;
}
}
这个注释给我们带来了什么?有了这个注释,我们就不应该做像
那样的检查if (id==null)
throw new IllegalArgumentException();
答案 0 :(得分:2)
我猜你所指的注释实际上是@ParametersAreNonnullByDefault
,因为Google根本不知道注释@ParametersAreNotNullByDefault
是什么。
此注释here有一些文档,以及相关的SO问题(我相信或多或少会回答您的问题)here。
使用JSR-305中的注释实现,代码如下:
@ParametersAreNonnullByDefault
public class NonnullTest
{
public static boolean parameterIsNull(Object o)
{
return (o == null);
}
public static void main(String[] args)
{
boolean str = parameterIsNull("foo");
boolean nul = parameterIsNull(null);
System.out.println("String returned: " + Boolean.toString(str));
System.out.println("null returned: " + Boolean.toString(nul));
}
}
编译并执行且没有错误,并打印:
String returned: false
null returned: true
所以看起来这个注释并没有主动阻止null
值通过异常等传递,并且你仍然需要检查你的参数是否无效。
这与我在JSR-305项目页面上阅读的内容一致,这似乎表明它添加的注释点是静态代码分析。