我有一个方法,其中参数用@Nonnull注释标记.调用该方法的代码必须检查该值是否为null.它不是直接的x!= null检查,而是在另一个类上调用实用程序方法. (在实际代码中,实用程序方法还检查它是否为空字符串).
我的问题是Intellij Idea在Nonnull方法调用上显示检查警告,说我的变量“可能为null”.我知道它不能为空因为实用方法检查 – 我怎么能告诉检查员呢?
由于这有点抽象,这里是我的意思的最小例子:
package org.ethelred.ideatest;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/**
* tests annotations
*/
public class AnnotationChecker
{
public static void main(String[] args)
{
String x = null;
if(args.length > 0)
{
x = args[0];
}
if(!isNull(x))
{
useObject(x);
}
if(x != null)
{
useObject(x);
}
}
public static boolean isNull(@CheckForNull Object o)
{
return o == null;
}
public static void useObject(@Nonnull Object o)
{
System.out.println(o);
}
}
这使用JSR 305注释.
在这个例子中,在第一次调用useObject时,Intellij对x参数发出警告,说“Argument’x’可能为null”.在第二次通话中,没有警告.