我正在试验 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/