你好,我有一个带有可空注释的自变量类。
class Parent {
@Nullable
String name;
Parent(@Nullable Strign name) {
this.name = name;
}
Driver createDriver() {
return new CommonDriver(name);
}
}
我有多个子类,对于大多数子类来说,“名称”参数可以为null,但有些子类不能。
class ChildC extends Parent {
ChildC(@NotNull String name){
super(name);
}
@Override
Driver createDriver() {
return new ChildCDriver(name);
}
}
现在我在ChildCDriver中遇到了问题(来自intelliJ的代码检查),名称为@NotNull
这可以通过某种方式解决吗?
答案 0 :(得分:1)
这是合理的代码,但是IntelliJ的功能不足以证明该代码正确。您需要禁止显示警告。单击该行,按threading
,然后在该菜单或子菜单中找到“抑制”。
source code可以验证您的代码。完整的代码显示在下面。 Nullness Checker注释表示字段@FieldInvariant
。
在没有Alt+Enter
批注的情况下,Nullness Checker会在第27行发出以下警告:
@FieldInvariant
使用error: [argument.type.incompatible] incompatible types in argument.
return new ChildCDriver(name);
^
found : @Initialized @Nullable String
required: @Initialized @NonNull String
批注,Nullness Checker可以证明代码正确。
下面的代码示例使用Checker Framework的@FieldInvariant
和@NonNull
批注,但是使用Nullness Checker has a more precise type in the subclass,因此您可以继续在代码中使用JetBrains批注。
@Nullable