当我有一个简单的测试类
public final class InitTest {
private String field;
public InitTest() {
init();
}
private void init() {
field = "";
}
}
检查器框架的初始化检查器正确报告问题:
InitTest.java:7: error: [initialization.fields.uninitialized] the constructor does not initialize fields: field
public InitTest() {
^
InitTest.java:8: error: [method.invocation.invalid] call to init() not allowed on the given receiver.
init();
^
found : @UnderInitialization(java.lang.Object.class) @NonNull InitTest
required: @Initialized @NonNull InitTest
2 errors
根据Initialization Checker 的文档,它应该能够通过命令行参数禁用初始化检查器:
要禁用初始化检查,请提供命令行参数
-AsuppressWarnings=uninitialized
当我们使用这个参数时(在 checker-framework 2.2.1 中)我们仍然得到一个初始化错误:
InitTest.java:8: error: [method.invocation.invalid] call to init() not allowed on the given receiver.
init();
^
found : @UnderInitialization(java.lang.Object.class) @NonNull InitTest
required: @Initialized @NonNull InitTest
1 error
我错过了什么还是这是一个错误?
注意:当我们使用-AsuppressWarnings=initialization
then 时不再显示错误 - 但这也会抑制与空值相关的问题:请参阅此SO讨论。