gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:51:01 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com