【问题标题】: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<? 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 方法。