在 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 ConstantConditions
或 null
-检查。
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;
}
}
我正在使用一个框架 (Minecraft Forge),该框架将特定对象注入具有 null
值的 public static final
字段(通过 @CapabilityInject
和 @ObjectHolder
注释)。不幸的是,每当我在不允许 null
值的上下文中引用这些字段之一时,IntelliJ IDEA 中的 "Constant conditions & exceptions" 检查会警告我该字段可能是 null
(因为它不我不知道注射)。
我知道这些字段在被访问时不会 null
,所以我想为它们禁用警告。
有没有办法禁用针对特定字段或 class 中所有字段的警告?向字段添加 @SuppressWarnings("ConstantConditions")
或 //noinspection ConstantConditions
不会删除字段访问的警告,向字段的 class 添加注释只会删除 class 中的警告。
我想避免向我访问字段的每个位置添加 //noinspection ConstantConditions
或 null
-检查。
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;
}
}