在IntelliJ IDEA中禁用“常量条件和异常”检查字段

时间:2017-10-01 11:59:45

标签: java intellij-idea minecraft minecraft-forge

我正在使用一个框架(Minecraft Forge),它将特定对象注入public static final个字段,并带有null个值(通过@CapabilityInject@ObjectHolder注释)。不幸的是,每当我在不允许null值的上下文中引用其中一个字段时,IntelliJ IDEA中的“常数条件和异常”检查警告我该字段可能是null(因为它不知道注射剂。)

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

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

我希望避免将//noinspection ConstantConditionsnull - 检查添加到我访问字段的每个位置。

1 个答案:

答案 0 :(得分:3)

diesieben07在我Minecraft Forge Forums的帖子中回答了这个问题。

解决方案/解决方法是创建一个始终返回null的方法,使用@Nonnull@SuppressWarnings("ConstantConditions")对其进行注释,然后使用该方法初始化将要注入的字段。< / p>

例如:

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的帖子中提供了另一种解决方案。

他们建议将初始化移至静态初始化块,而不是初始化内联字段。这似乎不像总是返回null的方法那么迟钝,但如果有很多字段要初始化(在我的情况下也是如此),它也会增加很多混乱。

例如:

public class Injection {

    @CapabilityInject
    public static final Capability<IItemHandler> CAPABILITY;

    static {
        CAPABILITY = null;
    }

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