我有一个方法,其中一个参数用@Nonnull
注释标记。调用该方法的代码必须检查该值是否为空。它不仅仅是直接x != null
检查,而是调用另一个类的实用方法。(在实际代码中,实用程序方法还会检查它是否为空字符串)。
我的问题是 Intellij Idea 在 Nonnull 方法调用上显示检查警告,说我的变量“可能为空”。由于实用程序方法检查,我知道它不能为空 - 我如何告诉检查员?
因为这有点抽象,所以这里有一个最小的例子来说明我的意思:
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 注释。
在此示例中,在对Intellij的第一次调用中,会在参数上显示“Argument 'x' might be null”的警告。在第二次调用中,没有警告。useObject
x