Java接口扩展可比性
2022-09-02 13:17:32
我希望有一个由 参数化的接口,并且还希望实现它的每个类也实现(with 及其子类型)。写起来很自然,但这行不通。那我该怎么办呢?A
T
A<T>
Comparable
T
interface A<T> extends Comparable<? extends T>
我希望有一个由 参数化的接口,并且还希望实现它的每个类也实现(with 及其子类型)。写起来很自然,但这行不通。那我该怎么办呢?A
T
A<T>
Comparable
T
interface A<T> extends Comparable<? extends T>
当出现时,这意味着您有一个实例可以与的一个(未知)子类型进行比较,而不是它可以与T的任何子类型进行比较。Comparable<? extends T>
Comparable
T
但是你不需要这样,因为 a 可以将自己与任何子类型进行比较,例如 a 可以将自身与 .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
如果使用可比较,则无需在 compare 函数中指定子类型的可能性,则本质上可以将对象 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);
}
}