我理解如何使用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
关于如何实现这一目标的想法?或者这根本不可能?
答案 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
。