我不能将 @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)
{
}
我正在试验 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)
{
}