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

use*_*602 6 java generics collections list 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));
     }
}
Run Code Online (Sandbox Code Playgroud)

然后我被告知有可能像这样调用这个方法:

List<Object> objs = new ArrayList<Object>();
List<Integer> ints = new ArrayList<Integer>();
Collections.copy(objs, ints);
Run Code Online (Sandbox Code Playgroud)

由于类型参数已留给编译器来确定,本书说编译器选择类型参数为Integer.

但那怎么可能呢?

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

这是一个错误,还是在考虑泛型时有不同的规则?我用google搜索过,大多数结果都说一个类不能成为它自己的子类.

JB *_*zet 8

不,这不是错误.

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

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