Java接口扩展了Comparable

oce*_*ola 16 java generics inheritance interface

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

fin*_*nnw 20

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

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

所以尝试:

interface A<T> extends Comparable<T> {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

要么

interface A<T extends Comparable<T>> extends Comparable<A<T>> {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

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