繁体   English   中英

禁用IntelliJ IDEA中的“恒定条件和例外”检查字段

[英]Disable “Constant conditions & exceptions” inspection for field in IntelliJ IDEA

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

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

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

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

diesieben07在我的世界锻造论坛上的主题中回答了这个问题。

解决方案/解决方案是创建一个始终返回null的方法,并使用@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线程中提供了另一种解决方案。

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

例如:

public class Injection {

    @CapabilityInject
    public static final Capability<IItemHandler> CAPABILITY;

    static {
        CAPABILITY = null;
    }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM