我有一种方法,其中参数用@Nonnull
批注标记。调用该方法的代码必须检查该值是否为null。它不仅仅是对x != null
的直接检查,还对另一个类调用了实用程序方法。 (在实际代码中,实用程序方法还会检查它是否为空的String)。
我的问题是Intellij Idea在Nonnull方法调用上显示检查警告,说我的变量“可能为null”。我知道由于实用程序方法检查,它不能为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
参数上发出警告,指出“参数'x'可能为空”。在第二个调用中,没有警告。
最佳答案
我不相信有任何方法可以按原样编写代码来解决警告。我希望发现IntelliJ支持可以在@SuppressWarnings
语句上使用的useObject(x)
值,但是根据this source却不支持。您可能只需要硬着头皮,然后将代码更改为以下内容:
if (x != null && !isBlank(x)) {
useObject(x);
}
请注意,我将方法
isNull
重命名为isBlank
,因为据我了解,您正在调用的实际方法会检查null
也会检查其他条件。
关于java - 如何使IntelliJ IDEA理解我的null检查方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10636483/