【问题标题】:Abstract Inheriting form of Comparable InterfaceComparable接口的抽象继承形式
【发布时间】:2014-03-11 16:14:07
【问题描述】:

我了解如何使用Comparable<T> 接口,但在这个具体示例中,我想知道是否有办法要求从抽象类中继承类(它实现了Comparable<T> 接口) 与自身可比。

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

public abstract class MyAbstractClass implements Comparable<MyAbstractClass>

还有一个继承自这个抽象类的类:

public class MyClass extends MyAbstractClass

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

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;
}

关于如何实现这一点的想法?还是根本不可能?

【问题讨论】:

    标签: java inheritance interface abstract comparable


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-16
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 2014-10-09
      • 2011-11-03
      相关资源
      最近更新 更多