如何创建多个子类级别,以便参数属于子类?
在这个StackOverFlow问题之后,让我们说我想扩展到另一个级别的子类,比如Mallards,我该怎么做?
public abstract class Animal <A extends Animal> { public abstract A copyAnimal(A animal); } public class Duck extends Animal { @Override public Duck copyAnimal(Duck duck) { return copyOfDuck; } } class Mallard extends Duck { public Mallard copyAnimal(Mallard mallard) { return copyOfMallard; } }
一切都适用于Duck子类,但它对于Mallard子类来说是失败的。 如何使用未确定数量的子类进行设置?
你只需继续使用类型变量:
class Duck> extends Animal {}
然后
class Mallard extends Duck {}
是的,它太乱了!
我经常看到这种模式与类的构建器一起使用,这些类被扩展为创建子类的构建器。 它使代码完全混乱,在我看来最好避免。
如何使用它的一个例子:
abstract class Animal> { abstract A copyAnimal(A animal); } class Duck> extends Animal { void quack() {} D copyAnimal(D duck) { duck.quack(); return duck; } } class Mallard extends Duck { Mallard copyAnimal(Mallard duck) { duck.quack(); return duck; } }
Ideone演示 (什么都不做;只是演示编译)