Java:误解的泛型和通配符

问题描述 投票:1回答:1

请考虑以下代码:

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吗?

java generics extends
1个回答
0
投票

不,他们不一样。

List<? extends T>表示

List类型为T或子分类T的未知类型的对象

List<? extends Comparable<? super T>>表示

List类型为Comparable<? super T>Comparable<? super T>的未知类型的对象。

让我们考虑这个类层次结构:AB是不相关的类,它们都实现Comparable<A>并且都是最终的。

如果从返回值推断出TA,则只能将List<A>传递给List<? extends T>类型的参数。但是,您可以将List<A>以及List<B>传递给List<? extends Comparable<? super T>>类型的参数。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.