现在在这段代码中我可以明显地遍历列表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);
}
但是这里将数据添加到集合中而不会像Integer和Double那样工作,而不是数字的超类和
我理解PECS概念(Producer Extends Consumer Super)
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);
}
正如所料,我在这里遇到错误,所以如何以正确的方式做到这一点所以我将能够在集合中添加我想要的任何类型?
答案 0 :(得分:4)
A List<? super Number>
表示继承树中的Number列表或以上 Number的类型。所以
List<Number>
符合条件:您可以将任意类型的数字添加到List<Number>
List<Serializable>
符合条件:您可以将任意类型的数字添加到List<Serializable>
List<Object>
符合条件:您可以将任意类型的数字添加到List<Object>
List<Integer>
不符合条件:您不能将任何类型的数字添加到List<Integer>
答案 1 :(得分:0)
也许你应该收集对象并使用适当的投射