gpt4 book ai didi

Java:父类(super class)的接口(interface)泛型

转载 作者:搜寻专家 更新时间:2023-10-31 08:23:24 24 4
gpt4 key购买 nike

想象一下下面的代码:

class A {}
class B extends A {}

interface IA extends Iterable<A> {}
interface IB extends Iterable<B> {}

理想情况下,我希望接口(interface) IB 也能够扩展 IA,因为它实际上允许您检索 A .

interface IB extends Iterable<B>, IA {}

甚至

interface IB extends Iterable<B> implements IA {}

但是,编译器真的不喜欢这两者,如果允许这样做,我的代码会更好,因为从概念上讲,B 可以用作 A 而无需在任何地方进行向上转换

我可以使用哪些解决方案来解决这个问题?

最佳答案

non-covariance of generics意味着您想要的东西不可行(至少在一般情况下不可行)。

但是,也许wildcards会解决你的具体问题?例如

void methodThatOperatesOnA(Iterable<? extends A> it) {
...
}

这将允许您从 it 中提取元素,就像它们是 A 一样,但是编译器会阻止您插入对象,* 因为它不能保证不变量会得到维护。


* 除了null 和其他一些古怪的案例

关于Java:父类(super class)的接口(interface)泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14407155/

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