整数扩展数字

use*_*757 2 java collections

现在,在这段代码中,我显然可以迭代列表,因为IntegersDouble都从超类扩展Number,并且按预期完美工作:

public static void viewList(List<? extends Number> num) {
    for (Number num1 : num) {
        System.out.println(num1);
    }
}

public static void main(String[] args) {

    List<Integer> arl = new ArrayList<Integer>();
    viewList(arl);

}
Run Code Online (Sandbox Code Playgroud)

但在这里将数据添加到集合中永远不会起作用,因为 Integer 和 Double 不是 Number 的超类,

我理解PECS概念(生产者扩展消费者超级)

public static void addList(List<? super Number> num) {
    num.add(1);
    num.add(2);
    num.add(3);
}

public static void main(String[] args) {

    List<Integer> arl = new ArrayList<Integer>();
    addList(arl);

}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我在这里收到错误,那么如何以正确的方式执行此操作,以便我能够在集合中添加我想要的任何类型?

JB *_*zet 5

A表示 Number 的列表,或者继承树中 Number之上List<? super Number>的类型。所以

  • List<Number>合格:您可以将任何类型的数字添加到List<Number>
  • List<Serializable>合格:您可以将任何类型的数字添加到List<Serializable>
  • List<Object>合格:您可以将任何类型的数字添加到List<Object>
  • List<Integer>不符合条件:您不得将任何类型的数字添加到List<Integer>