我是否可以将@NonNullByDefault与没有空注释约束的继承类混合使用?

时间:2017-03-07 02:46:42

标签: java eclipse annotations nullable

我正在试验Eclipse null annotations并且我收到了错误消息。我有一个A类(下面的例子)我没有源。我想将它扩展为由@NonNullByDefault注释的类。这会引发错误,因为@NonNull约束与父类的无约束(可为空的可继承)参数不匹配。

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

我做错了吗?

A类:

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

   }
}

B组:

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

   }
}

我收到的错误是:

  

非法重新定义参数a,从A继承的方法没有   约束此参数

1 个答案:

答案 0 :(得分:1)

可以将context与继承的,无约束的类一起使用,但必须将明确的context约束应用于任何被覆盖的方法的方法参数。这是因为java的默认无约束行为是允许空值。

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

有一个错误,但它没有注释;这是Eclipse的结果(截至4.6),使用快速修复功能将注释放在错误的位置,加强了错误的位置,但不能纠正错误。

数组的正确位置是:

@Nullable