在 IntelliJ IDEA 中禁用 "Constant conditions & exceptions" 字段检查

Disable "Constant conditions & exceptions" inspection for field in IntelliJ IDEA

我正在使用一个框架 (Minecraft Forge),该框架将特定对象注入具有 null 值的 public static final 字段(通过 @CapabilityInject@ObjectHolder 注释)。不幸的是,每当我在不允许 null 值的上下文中引用这些字段之一时,IntelliJ IDEA 中的 "Constant conditions & exceptions" 检查会警告我该字段可能是 null (因为它不我不知道注射)。

我知道这些字段在被访问时不会 null,所以我想为它们禁用警告。

有没有办法禁用针对特定字段或 class 中所有字段的警告?向字段添加 @SuppressWarnings("ConstantConditions")//noinspection ConstantConditions 不会删除字段访问的警告,向字段的 class 添加注释只会删除 class 中的警告。

我想避免向我访问字段的每个位置添加 //noinspection ConstantConditionsnull-检查。

diesieben07 在 Minecraft Forge Forums.

我的帖子中回答了这个问题

solution/workaround是创建一个总是returnsnull的方法,用@Nonnull@SuppressWarnings("ConstantConditions")注释,然后用它来初始化将被注入的字段。

例如:

public class Injection {

    @CapabilityInject
    public static final Capability<IItemHandler> CAPABILITY = getNull();

    @Nonnull
    @SuppressWarnings({"ConstantConditions", "SameReturnValue"})
    private static <T> T getNull() {
        return null;
    }

    public void doStuff() {
        // No warning
        Capability<IItemHandler> capability = CAPABILITY;
    }
}

Salamander 在 WTDWTF.

上的帖子中提供了替代解决方案

他们建议将初始化移动到静态初始化程序块,而不是内联初始化字段。这似乎比总是 returns null 的方法更简单,但如果有很多字段要初始化(在我的例子中有),它也会增加很多混乱。

例如:

public class Injection {

    @CapabilityInject
    public static final Capability<IItemHandler> CAPABILITY;

    static {
        CAPABILITY = null;
    }

    public void doStuff() {
        // No warning
        Capability<IItemHandler> capability = CAPABILITY;
    }
}