gpt4 book ai didi

java - 如何创建多个级别的子类,以便参数属于子类?

转载 作者:行者123 更新时间:2023-12-01 16:46:36 25 4
gpt4 key购买 nike

关注此StackOverFlow question假设我想扩展到另一个级别的子类,例如 Mallards,我该怎么做?

public abstract class Animal <A extends Animal<A>>
{
public abstract A copyAnimal(A animal);
}

public class Duck extends Animal<Duck>
{
@Override
public Duck copyAnimal(Duck duck)
{
return copyOfDuck;
}
}

class Mallard extends Duck<Mallard>
{
public Mallard copyAnimal(Mallard mallard)
{
return copyOfMallard;
}
}

对于 Duck 子类来说一切都很好,但对于 Mallard 子类来说却失败了。如何使用未确定数量的子类来设置它?

最佳答案

您只需继续使用类型变量即可:

class Duck<D extends Duck<D>> extends Animal<D> {}

然后

class Mallard extends Duck<Mallard> {}

是的,这很困惑!

我最常看到这种模式与类的构建器一起使用,该类的构建器被扩展以创建子类的构建器。它使代码变得一团糟,在我看来最好避免。

<小时/>

如何使用它的示例:

abstract class Animal<A extends Animal<A>> {
abstract A copyAnimal(A animal);
}

class Duck<D extends Duck<D>> extends Animal<D> {
void quack() {}

D copyAnimal(D duck) {
duck.quack();
return duck;
}
}

class Mallard extends Duck<Mallard> {
Mallard copyAnimal(Mallard duck) {
duck.quack();
return duck;
}
}

Ideone demo (不执行任何操作;仅演示编译)

关于java - 如何创建多个级别的子类,以便参数属于子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49457750/

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