我怎样才能有一个抽象的方法接受#34型的参数;我的类型"?

时间:2017-02-03 10:46:42

标签: java oop abstract-class

让我们说我有一个抽象类Animal和一个抽象方法

public abstract Animal mateWith(Animal mate);

问题是,如果我创建子类Snake和Armadillo,那么这样的调用将是合法的:

mySnake.mateWith(myArmadillo);

但我只希望蛇能够与蛇交配。我需要能够定义这样的东西:

public abstract Animal_Of_My_Class mateWith(Animal_Of_My_Class mate);

这在Java中是否可行?

1 个答案:

答案 0 :(得分:7)

救援的自我约束:

abstract class Animal<T extends Animal<T>> {
  abstract T mateWith(T mate);
}

然后:

class Animal_Of_My_Class extends Animal<Animal_Of_My_Class> {
  Animal_Of_My_Class mateWith(Animal_Of_My_Class mate) { ... }
}

请注意,您不能将T限制为实施类(例如,您不能要求Animal_Of_My_Class extends Animal<Animal_Of_My_Class>而不是Animal_Of_My_Class extends Animal<Another_Animal_Of_My_Class>)。