gpt4 book ai didi

java - 在 Java 中重写泛型类的方法时返回类型不兼容

转载 作者:搜寻专家 更新时间:2023-10-31 19:46:10 25 4
gpt4 key购买 nike

我在玩泛型,我发现了一个我真的想不通的问题。请看一下这段代码:

class Operation<R> {
}

class P<O extends Operation<R>, R> {
}

class MyResource {
}

class MyO extends Operation<MyResource> {
}

class MyP extends P<MyO, MyResource> {
}

abstract class A<R> {
abstract P<Operation<R>, R> doIt();
}

class B extends A<MyResource> {
@Override
MyP doIt() {
/*
the compiler is complaining about the above line:
The return type is incompatible with A<MyResource>.doIt()
*/
return null;
}
}

所以基本上,MyPP<MyO, MyResource> 的子类这又是一个子类 P<Operation<MyResource>, MyResource> .换句话说,我们正在返回 A.doIt 的子类。返回类型 B.doIt .尽管如此,编译器还是在提示。

你能帮我理解一下吗?谢谢。

最佳答案

问题是 MyPP<MyO,> , 这与 P<Operation<MyResource>,> 不同(即使它确实继承了它)。
您需要将抽象方法的返回类型更改为在该参数中是协变的:

abstract class A<R> {
abstract P<? extends Operation<R>, R> doIt();
}

现在,MyP可转换为基本返回类型,因此一切正常。

关于java - 在 Java 中重写泛型类的方法时返回类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22384054/

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