gpt4 book ai didi

java - 返回具有泛型的对象子类

转载 作者:太空狗 更新时间:2023-10-29 22:49:11 25 4
gpt4 key购买 nike

对于一个抽象类,我想定义一个为子类返回“this”的方法:

public abstract class Foo {
...
public <T extends Foo> T eat(String eatCake) {
...
return this;
}
}

public class CakeEater extends Foo {}

我希望能够做这样的事情:

CakeEater phil = new CakeEater();
phil.eat("wacky cake").eat("chocolate cake").eat("banana bread");

可以说香蕉面包会抛出 IllegalArgumentException 并显示消息“不是蛋糕!”

最佳答案

public abstract class Foo<T extends Foo<T>>  // see ColinD's comment
{
public T eat(String eatCake)
{
return (T)this;
}
}

public class CakeEater extends Foo<CakeEater>
{
public void f(){}
}

编辑

要求子类以某种超出静态类型检查范围的方式行事是没有问题的。我们一直这样做 - 一页又一页的通俗英语来指定您如何编写子类。

另一个提议的解决方案,具有协变返回类型,必须做同样的事情 - 用简单的英语要求子类实现者返回 this 的类型。该要求不能通过静态类型指定。

关于java - 返回具有泛型的对象子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3284610/

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