为什么有人使用@ParametersAreNotNullByDefault?

时间:2013-10-07 22:49:15

标签: java

我在代码中已经看到了这里有

的声明
@ParametersAreNotNullByDefault 
public class A
{
private String id;

public A(final String id)
{
this.id = id;
}
}

这个注释给我们带来了什么?有了这个注释,我们就不应该做像

那样的检查
if (id==null)
throw new IllegalArgumentException();

1 个答案:

答案 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项目页面上阅读的内容一致,这似乎表明它添加的注释点是静态代码分析