【问题标题】:Disable "Constant conditions & exceptions" inspection for field in IntelliJ IDEA禁用 IntelliJ IDEA 中字段的“恒定条件和异常”检查
【发布时间】:2017-10-01 11:59:44
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java intellij-idea minecraft minecraft-forge


    【解决方案1】:

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

    解决方案/解决方法是创建一个始终返回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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 2018-10-09
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多