有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

接下来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子类,一切都失败了。我如何用数量不确定的子类来设置它


共 (1) 个答案

  1. # 1 楼答案

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

    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(不做任何事情;只演示编译)