摘要继承可比接口的形式

时间:2014-02-13 00:51:18

标签: java inheritance interface abstract comparable

我理解如何使用Comparable<T>接口,但在这个具体的例子中,我想知道是否有办法要求从Abstract Class 继承类(它实现{{1接口)可与自身比较。

让我重申一下,有一个实现可比接口的抽象类:

Comparable<T>

继承自此抽象类的类:

public abstract class MyAbstractClass implements Comparable<MyAbstractClass>

通常使用此设置,需要以下方法来满足Comparable Interface:

public class MyClass extends MyAbstractClass

这要求我进行以下演员:

public int compareTo(MyAbstractClass otherAbstractObject)

鉴于此演员阵容很容易通过尝试使用public int compareTo(MyAbstractClass otherAbstractObject) { MyClass otherObject = (MyClass) otherAbstractObject; // Comparison... return result; } 的不同子项而失败,我希望能够定义我的抽象类以接受以下方法:

MyAbstractClass

关于如何实现这一目标的想法?或者这根本不可能?

1 个答案:

答案 0 :(得分:3)

可以使用泛型来定义它。您可以按如下方式定义MyAbstractClass

public abstract class MyAbstractClass<T extends AbstractClass<T>>
    implements Comparable<T>

然后您可以定义子类,例如

public class MyClass extends MyAbstractClass<MyClass>

允许您像这样定义compareTo方法:

public int compareTo(MyClass otherMyClass)

但是,这并不能阻止任何人编写不符合模式的子类:

public class SneakyClass extends MyAbstractClass<MyClass>

也可以类似地定义compareTo方法:

public int compareTo(MyClass otherMyClass)

注意:没有什么可以强制类的泛型类型参数等于它定义的类;你能做的最好的事情是强制抽象类的上限,至少强迫它成为某种MyAbstractClass