父母的有效注释对孩子无效

时间:2019-06-26 09:48:46

标签: java annotations nullable

你好,我有一个带有可空注释的自变量类。

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

这可以通过某种方式解决吗?

1 个答案:

答案 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