请考虑以下代码:
public final class Algorithm {
public static <T extends Comparable<? super T>>
T max(List<? extends T> list, int begin, int end)
{
// ...
}
}
List<? extends T> list
参数声明等于List<? extends Comparable<? super T>> list
吗?
不,他们不一样。
List<? extends T>
表示
List
类型为T
或子分类T
的未知类型的对象
List<? extends Comparable<? super T>>
表示
List
类型为Comparable<? super T>
或Comparable<? super T>
的未知类型的对象。
让我们考虑这个类层次结构:A
和B
是不相关的类,它们都实现Comparable<A>
并且都是最终的。
如果从返回值推断出T
为A
,则只能将List<A>
传递给List<? extends T>
类型的参数。但是,您可以将List<A>
以及List<B>
传递给List<? extends Comparable<? super T>>
类型的参数。