Java 泛型 - Class 其自身的子类?

Java Generics - Class a Subclass of itself?

我目前正在阅读 Java 泛型,当涉及到通配符时我有点卡住了。

我从 Collections class:

得到了这个方法
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。

但这怎么可能呢?

如果取为Integer,这意味着在方法声明中-
List<? extends T> 将转换为 List<Integer extends Integer>

这是一个错误,还是关于泛型有不同的规则?我用谷歌搜索了一下,大多数结果都说 class 不能是其自身的子 class。

不,这不是错误。

? extends Integer 表示:任何 class 是或扩展 Integer(或实现 Integer,如果 Integer 是一个接口)。

同样适用于 ? super Integer,这意味着:任何 class 是 Integer 或者是 Integer 的 superclass 或 super-interface。