gpt4 book ai didi

Java编译错误用泛型参数覆盖泛型方法

转载 作者:行者123 更新时间:2023-12-04 20:43:34 25 4
gpt4 key购买 nike

import java.util.Collection;

public abstract class A {

public class R<T> { }

public abstract <X> R<X> get1();

public abstract <X> R<X> get2(Collection<String> p);

public abstract <X> R<X> get3(Collection<Integer> p);

public class B extends A {

@Override
public R<Object> get1() {
return null;
}

@Override
public R<Object> get2(Collection<String> p) {
return null;
}

@Override
public <Object> R<Object> get3(Collection<Integer> p) {
return null;
}
}
}

get1 方法工作正常,但 get2 存在编译错误:

  • The method get2(Collection) of type A.B must override or implement a supertype method

这个错误只会出现在带有泛型的参数上。 get3 可以编译但当然有警告:

  • The type parameter Object is hiding the type Object

显然还有其他方法可以解决此问题,但据我了解,这应该是合法的,我的问题更多是为什么会出现此编译错误。提前致谢!

编辑:

对不起,我的例子不够清楚。因此,这是对您的某些回答使用react的新方法。

public abstract class A {

public abstract class R<T> { }

public abstract <X> R<X> get();

public abstract <Y> R<Y> get2(Collection<String> p);

public abstract <Z> R<Z> get3(Collection<Integer> p);

public class B extends A {

@Override
public R<String> get() {
return null;
}

@Override
public R<Double> get2(Collection<String> p) {
return null;
}

@Override
public <V> R<V> get3(Collection<Integer> p) {
return null;
}
}
}
  • get2 的编译错误与上述相同,get 的类型安全警告明显,我希望 get2 也会出现这种警告.
  • 我希望每个方法都有自己的类型,所以类类型不是解决方案。
  • 对于这个例子来说,使用 Object 是一个错误的决定,但这不是我的意思,旧 get3 的类型隐藏问题如上所述。
  • 正如 lexicore 所说,问题在于签名。因此我会评论他的回答。

最佳答案

这里:

public <Object> R<Object> get3(Collection<Integer> p) {

可能不是你的意思。

您正在引入另一个类型变量,这里称为Object

比较一下:

public R<Object> get2(Collection<String> p) {

换句话说:get2()使用 java.lang.Object。 get3() 使用 generic 类型,不幸的是它被命名为 Object。你也可以写

public <NONSENSE> R<NONSENSE> get3(Collection<Integer> p) {

最后:get2() 也不是你会做的。请参阅 Michael 对此部分的出色回答。

关于Java编译错误用泛型参数覆盖泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50293411/

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