[英]Abstract Inheriting form of Comparable Interface
我了解如何使用Comparable<T>
接口,但在这个特定示例中,我想知道是否有办法要求从抽象类(实现Comparable<T>
接口)继承的类与本身。
让我重申一下,有一个抽象类实现了 Comparable 接口:
public abstract class MyAbstractClass implements Comparable<MyAbstractClass>
还有一个继承自这个抽象类的类:
public class MyClass extends MyAbstractClass
通常使用此设置,需要以下方法来满足可比接口:
public int compareTo(MyAbstractClass otherAbstractObject)
这要求我进行以下演员表:
public int compareTo(MyAbstractClass otherAbstractObject)
{
MyClass otherObject = (MyClass) otherAbstractObject;
// Comparison...
return result;
}
鉴于此转换很容易通过尝试使用MyAbstractClass
的不同子级而MyAbstractClass
,我希望能够定义我的抽象类以接受以下方法:
public int compareTo(MyClass otherMyObject)
{
// Comparison...
return result;
}
以及如何实现这一目标的想法? 或者根本不可能?
您可以使用泛型定义MyAbstractClass
,如下所示:
public abstract class MyAbstractClass<T extends MyAbstractClass<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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.