gpt4 book ai didi

java - 有没有办法在 Java 中说 "method returns this"?

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

有没有办法使用泛型来表示“此方法返回 this”?

当然,我想在子类中覆盖这个方法,所以声明应该与@Override 一起工作。 .

这是一个例子:

class Base {
public Base copyTo (Base dest) {
... copy all fields to dest ...
return this;
}
}
class X extends Base {
@Override
public X copyTo (X dest) {
super.copyTo (dest);
... copy all fields to dest ...
return this;
}
}

public <T extends Base> T copyTo (Base dest)根本不起作用:我得到“类型不匹配:无法从 Base 转换为 T”。如果我强制强制转换它,覆盖将失败。

最佳答案

您可以做一些非常聪明的事情(类似于他们在 Scala 中使用 2.8 collection framework 所做的事情)。声明一些应该返回“自身”的接口(interface)方法(注意: This 是类型参数,而不是关键字!)

public interface Addable<T, This extends Addable<T, This>> {
public This add(T t);
}

现在声明一个间接级别——一个"template"类

public interface ListTemplate<A, This extends ListTemplate<A, This>> 
extends Addable<A, This>{
}

public interface List<A> extends ListTemplate<A, List<A>> {
}

然后 List 的实现必须从 add 方法返回一个 List(我会让你填写实现细节)

public class ListImpl<A> implements List<A> {

public List<A> add(A a) {
return ...
}
}

同样,您可以声明一个 SetTemplate 和一个 Set 来扩展 Addable 接口(interface) - add 方法其中会返回一个 Set。很酷吧?

关于java - 有没有办法在 Java 中说 "method returns this"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1091015/

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