Java 为什么有人默认使用@ParametersRenotnull?
我在代码中看到了这一点,其中有一个Java 为什么有人默认使用@ParametersRenotnull?,java,Java,我在代码中看到了这一点,其中有一个 @ParametersAreNotNullByDefault public class A { private String id; public A(final String id) { this.id = id; } } 这个注解给我们买了什么?有了这个注释,我们不应该像这样做检查吗 if (id==null) throw new IllegalArgumentException(); 我猜你提到的注释实际上是@ParametersAreNonnu
@ParametersAreNotNullByDefault
public class A
{
private String id;
public A(final String id)
{
this.id = id;
}
}
这个注解给我们买了什么?有了这个注释,我们不应该像这样做检查吗
if (id==null)
throw new IllegalArgumentException();
我猜你提到的注释实际上是
@ParametersAreNonnullByDefault
,考虑到谷歌根本不知道注释@ParametersAreNonnullByDefault
有一些关于这个注释的文档,以及一个相关的SO问题(我相信这或多或少回答了您的问题)
使用中注释的实现,将生成以下代码:
@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项目页面上读到的内容一致,这似乎表明它添加的注释的要点是静态代码分析。但它实际上检查空值吗?我用一个简单的测试用例更新了我的答案,以证明它实际上没有检查空值。哦,老鼠。。。如果我使用JetBrains的NotNull,如果它违反了条件,它将抛出异常,但是如果我使用标准Nonnull(或者默认情况下使用参数ARENONNULLBYDEFAULT),它不会抛出异常。尽管IDEA确实允许我配置要使用的注释,但它似乎只对类进行了检查(