[英]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 ConstantConditions
或null
-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.