java我不能将@NonNullByDefault与没有null注释约束的继承类混合使用吗?
我在用Eclipse null annotations做实验,结果出错了。我有一个a类(下面的例子),我没有它的来源。我想为一个由@NonNullByDefault
注释的类扩展它。这会引发错误,因为@NonNull
约束与父类的无约束(继承时可为null)参数不匹配
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
# 1 楼答案
可以对继承的、不受约束的类使用
@NonNullByDefault
,但必须对任何被重写方法的方法参数应用显式@Nullable
约束。这是因为java的默认无约束行为是允许空值这里的混乱是由于
@Nullable
注释的错误放置造成的。原始问题中的位置表明数组内容不应为空,而不是数组本身有一个bug,但它与注释无关;这是Eclipse(从4.6开始)使用Quick Fix功能将注释放置在错误位置的结果,这加强了错误的放置,从而无法纠正错误
阵列的正确位置为: