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

标签 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)
   {

   }
}

我收到的错误是:

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)
{

}

关于java - 我不能将 @NonNullByDefault 与没有空注释约束的继承类混合使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42639244/

相关文章:

eclipse - Blender 附加组件的 PyDev 和 Eclipse 设置

java - 启动错误: could not create the Java virtual machine.发生致命异常

java - Eclipse:资源不在 Java 项目的构建路径上

java - 编写注释以防止参数无效时调用方法

java - 重新格式化列表中的文本文件输出 (Java)

java - 如何在 Java 中将数字(作为字符串)转换为字节数组?

java - 从明天开始的所有日子和两个月前的所有日子并循环遍历它们

java - Java 8 和 Felix bundle 中 Unresolved 约束

java - 如何强制 Java 子类定义注解?

doctrine-orm - 如何在 Doctrine 2 中使用 readOnly 标志?