【问题标题】:Java interface extends ComparableJava 接口扩展了 Comparable
【发布时间】:2011-01-14 23:10:08
【问题描述】:

我希望有一个由TA<T> 参数化的接口A,并且还希望实现它的每个类也实现Comparable(带有T 及其子类型)。写interface A<T> extends Comparable<? extends T> 似乎很自然,但这不起作用。那我该怎么做呢?

【问题讨论】:

标签: java generics inheritance interface


【解决方案1】:

如果您使用可比较,则无需在比较函数中指定子类型的可能性,本质上可以将对象 X 的任何子类型传递到声明类 X 参数的方法中。参见代码了解更多信息。

public interface Test<T> extends Comparable<T> {

}

class TestImpl implements Test<Number> {
    @Override
    public int compareTo(final Number other) {
        return other.intValue() - 128;
    }
}

class TestMain {
    public static void main(final String[] args) {
        TestImpl testImpl = new TestImpl();
        testImpl.compareTo(Integer.MIN_VALUE);
    }
}

【讨论】:

    【解决方案2】:

    Comparable&lt;? extends T&gt; 出现时,这意味着您有一个Comparable 实例,可以与T 的一个(未知)子类型进行比较,而不是可以将其与任何 的子类型进行比较T.

    但你不需要那个,因为 Comparable&lt;T&gt; 无论如何都可以将自己与 T 的任何子类型进行比较,例如Comparable&lt;Number&gt; 可以将自己与 Comparable&lt;Double&gt; 进行比较。

    那就试试吧:

    interface A<T> extends Comparable<T> {
        // ...
    }
    

    interface A<T extends Comparable<T>> extends Comparable<A<T>> {
        // ...
    }
    

    取决于您是否需要能够比较 T 的实例以实现您的 compareTo 方法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2021-03-17
    • 2017-12-07
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多