List <Object>如何是List <?的子类型?超级数>

Pra*_*eek 3 java generics collections

阅读书籍Java Generics and Collections.在Wildcards with Super一节中,我举了一个例子

public static <T> void copy(List<? super T> dst, List<? extends T> src) {
  for (int i = 0; i < src.size(); i++) {
     dst.set(i, src.get(i));
  }
}
Run Code Online (Sandbox Code Playgroud)

它被称为这样:

Collections.<Number>copy(objs, ints);
Run Code Online (Sandbox Code Playgroud)

以上电话有效,其解释如下:

允许调用因为objs有类型List<Object>,它是List<? super Number>(因为ObjectNumber通配符所需的超类型)的子ints类型List<Integer>,并且具有类型,它是List<? extends Number>(因为IntegerNumber扩展通配符所需的子类型)的子类型

我的疑问是怎样List<Object>的一个亚型 List<? super Number>

Daw*_*ica 8

这是子类型的定义.当且仅当类型的每个对象或基元也是类型时,Type X是类型的类型.所以你问的问题是,每个类型的对象是否(或如何)也是类型.YXYList<Object>List<? super Number>

现在,该部分? super Number意味着"任何类型Number,包括Number其自身的超类型".只有两种这样的类型 - NumberObject.

List<? super Number>是一个包含List<Number>List<Object>没有其他类型的抽象类型(当然,除了这两个类型的子类型).