Cho*_*ter 6 java intellij-idea minecraft minecraft-forge
我正在使用一个框架(Minecraft Forge),它将特定对象注入到public static final具有值的字段中null(通过@CapabilityInject和@ObjectHolder注释)。不幸的是,每当我在不允许null值的上下文中引用这些字段之一时,IntelliJ IDEA 中的“常量条件和异常”检查都会警告我该字段可能是null(因为它不知道注入)。
我知道这些字段在被访问时不会出现null,所以我想禁用它们的警告。
有没有办法禁用特定字段或类中所有字段的警告?添加@SuppressWarnings("ConstantConditions")或//noinspection ConstantConditions到字段不会删除字段访问的警告,而将注释添加到字段的类只会删除该类中的警告。
我想避免添加//noinspection ConstantConditions或null检查我访问字段的每个位置。
diesieben07 在我的Minecraft Forge 论坛上的帖子中回答了这个问题。
解决方案/解决方法是创建一个始终返回 的方法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;
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5431 次 |
| 最近记录: |