gpt4 book ai didi

Java定义父类(super class)的协变返回

转载 作者:行者123 更新时间:2023-11-30 09:33:53 25 4
gpt4 key购买 nike

我有以下抽象类:

public abstract class AbstractSharpCollection<T> implements SharpCollection<T>

和一个接口(interface)

public interface SharpCollection<T> extends Iterable<T>
{
SharpCollection<T> tail();
}

SharpCollection 中定义了许多其他方法,它们返回另一个 SharpCollection。所有这些方法的逻辑仅依赖于迭代器。

我希望能够在 AbstractSharpCollection 上创建一个方法,这样对 tail() 的调用将返回子类的实例,而不是父类(super class)。

有点像

public <V extends SharpCollection<T>> V tail() { //code logic here }

我知道我可以重写扩展 AbstractSharpCollection 的子类的返回类型,但是必须重写所有方法只是为了更改返回类型真的很丑陋、麻烦且容易出错。

有什么方法可以实现我想要的吗?

感谢您的帮助。

最佳答案

实现 tail 会很困难。 null 是唯一有效的返回值。

看来您需要对 SharpCollection 进行参数化,以便它“知道”正在使用的实际接口(interface)类型:

public interface SharpCollection<
THIS extends SharpCollection<THIS, T>,
T
> extends Iterable<T> {
THIS tail();
}

不幸的是,这也使客户端代码变得复杂。

关于Java定义父类(super class)的协变返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11990297/

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