0

我在有声明的代码中看到了这一点

@ParametersAreNotNullByDefault 
public class A
{
private String id;

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

这个注释给我们带来了什么?有了这个注释,我们不应该做类似的检查

if (id==null)
throw new IllegalArgumentException();
4

1 回答 1

2

我猜你所指的注释实际上是@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 项目页面上看到的一致,这似乎表明它添加的注解的重点是静态代码分析

于 2013-10-07T22:53:15.687 回答