有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

可比接口的java抽象继承形式

我理解如何使用Comparable<T>接口,但是在这个特定的示例中,我想知道是否有一种方法可以要求从抽象类(实现Comparable<T>接口)继承类与自身相比较

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

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的不同子级很容易导致此强制转换失败,因此我希望能够定义我的抽象类以接受以下方法:

public int compareTo(MyClass otherMyObject)
{
    // Comparison...
    return result;
}

以及如何实现这一目标的想法?还是根本不可能


共 (1) 个答案

  1. # 1 楼答案

    您可以使用泛型定义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