现在,在这段代码中,我显然可以迭代列表,因为Integers和Double都从超类扩展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)
正如预期的那样,我在这里收到错误,那么如何以正确的方式执行此操作,以便我能够在集合中添加我想要的任何类型?
A表示 Number 的列表,或者继承树中 Number之上List<? super Number>的类型。所以
List<Number>合格:您可以将任何类型的数字添加到List<Number>List<Serializable>合格:您可以将任何类型的数字添加到List<Serializable>List<Object>合格:您可以将任何类型的数字添加到List<Object>List<Integer>不符合条件:您不得将任何类型的数字添加到List<Integer>