繁体   English   中英

Comparable接口的抽象继承形式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM