我不能将 @NonNullByDefault 与没有空注释约束的继承 类 混合使用吗?

Can I not mix @NonNullByDefault with inherited classes that have no null annotation constraint?

我正在试验 Eclipse null annotations,但遇到错误。我有一个 class A(下面的例子),但我没有它的来源。我想将它扩展为一个由 @NonNullByDefault 注释的 class。这会引发错误,因为 @NonNull 约束与父 class.

的无约束(可空继承)参数不匹配

Eclipse 建议添加 @Nullable 但这不会使错误消失。

我是不是做错了什么?

Class答:

public class A {
   public void SomeMethod(
      String[] a)
   {

   }
}

Class乙:

@NonNullByDefault
public class B extends A {
   @Override
   public void SomeMethod(
      @Nullable String[] a)
   {

   }
}

我收到的错误是:

Illegal redefinition of parameter a, inherited method from A does not constrain this parameter

可以将 @NonNullByDefault 与继承的、不受约束的 类 一起使用,但是必须将显式 @Nullable 约束应用于任何被覆盖的方法的方法参数。这是因为 java 的默认、不受约束的行为是允许空值。

这里的混淆是 @Nullable 注释错位的结果。原始问题中的位置表明数组 contents 不应为 null 而不是数组本身。

有一个错误,但它与注释无关;这是 Eclipse(自 4.6 起)使用“快速修复”功能将注释放置在错误位置的结果,加强了无法更正错误的错误放置。

数组的正确位置是:

public void SomeMethod(
   String @Nullable[] a)
{

}