Java Generics - 它自己的一个子类?

时间:2015-12-23 18:36:44

标签: java list generics collections wildcard

我目前正在阅读Java Generics,在通配符方面我有点陷入困境。

我从Collections类中获得了这个方法:

public void <T> copy(List<? super T> dest, List<? extends T> src) {
    for(int i = 0; i < src.size(); i++) {
        dest.set(i, src.get(i));
     }
}

然后我被告知可以这样调用这个方法:

List<Object> objs = new ArrayList<Object>();
List<Integer> ints = new ArrayList<Integer>();
Collections.copy(objs, ints);

由于类型参数已留待编译器确定,本书称编译器选择类型参数为Integer。

但这怎么可能?

如果它被认为是整数,这意味着在方法声明中 -
List<? extends T>会转换为List<Integer extends Integer>

这是一个错误,还是在使用泛型时有不同的规则?我已经google了,大多数结果都说一个类不能成为它自己的子类。

1 个答案:

答案 0 :(得分:8)

不,这不是错误。

? extends Integer表示:任何属于或扩展Integer的类(或实现Integer,如果Integer是接口)。

同样适用于? super Integer,这意味着:任何类是Integer或者是Integer的超类或超级接口。