Java接口扩展可比性

2022-09-02 13:17:32

我希望有一个由 参数化的接口,并且还希望实现它的每个类也实现(with 及其子类型)。写起来很自然,但这行不通。那我该怎么办呢?ATA<T>ComparableTinterface A<T> extends Comparable<? extends T>


答案 1

当出现时,这意味着您有一个实例可以与的一个(未知)子类型进行比较,而不是它可以与T的任何子类型进行比较。Comparable<? extends T>ComparableT

但是你不需要这样,因为 a 可以将自己与任何子类型进行比较,例如 a 可以将自身与 .Comparable<T>TComparable<Number>Comparable<Double>

所以试试:

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

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

这取决于您是否需要能够比较 的实例才能实现您的方法。TcompareTo


答案 2

如果使用可比较,则无需在 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);
    }
}

推荐