我在有声明的代码中看到了这一点
@ParametersAreNotNullByDefault
public class A
{
private String id;
public A(final String id)
{
this.id = id;
}
}
这个注释给我们带来了什么?有了这个注释,我们不应该做类似的检查
if (id==null)
throw new IllegalArgumentException();
我在有声明的代码中看到了这一点
@ParametersAreNotNullByDefault
public class A
{
private String id;
public A(final String id)
{
this.id = id;
}
}
这个注释给我们带来了什么?有了这个注释,我们不应该做类似的检查
if (id==null)
throw new IllegalArgumentException();
我猜你所指的注释实际上是@ParametersAreNonnullByDefault
,考虑到谷歌根本不知道注释@ParametersAreNotNullByDefault
是什么。
这里有一些关于这个注释的文档,还有一个相关的 SO 问题(我相信它或多或少地回答了你的问题)。
使用来自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 项目页面上看到的一致,这似乎表明它添加的注解的重点是静态代码分析。