Java接口扩展了Comparable

时间:2010-02-09 19:20:05

标签: java generics inheritance interface

我想要A T参数设置一个接口A<T>,并希望每个实现它的类也实现ComparableT及其子类型。写interface A<T> extends Comparable<? extends T>似乎很自然,但这不起作用。那我该怎么办?

2 个答案:

答案 0 :(得分:19)

Comparable<? extends T>出现时,表示您的Comparable实例可以与T的一个(未知)子类型进行比较,而不是可以与进行比较 T的子类型。

但您不需要这样,因为Comparable<T>可以将自己与T的任何子类型进行比较,例如Comparable<Number>可以将自己与Comparable<Double>进行比较。

所以试试:

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

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

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

答案 1 :(得分:2)

如果使用可比较的,则不需要在比较函数中指定子类型的可能性,本质上可以将对象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);
    }
}