java - 如何使IntelliJ IDEA理解我的null检查方法?

标签 java intellij-idea nullable

我有一种方法,其中参数用@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/

相关文章:

java - 使用 JAXB XMLAnyElement 类型的样式返回动态元素名称

java - Cassandra 中的范围查询

java - 文件名上的黄色背景在 Intellij 中意味着什么?

Java多线程,从单独的类访问列表

java - 如何以 OffsetDateTime 格式获取一天的结束时间,格式为 2019-12-29 05 :59:59. 9999990 +00 :00?

Android Hello-World 编译错误 : Intellij cannot find aapt

java - Intellij 断点不停止

oracle - 如何约束多列以防止重复,但忽略空值?

objective-c - Objective-C 中可为空、__nullable 和 _Nullable 之间的区别

java - @NotNull 是否在运行时工作