现在,在这段代码中,我显然可以将列表迭代为 Integers
和Double
都是从Number
扩展父类(super class)按预期完美运行:
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 不是 Number 的父类(super class),
我了解PECS概念(生产者扩展消费者 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);
}
正如预期的那样,我在这里遇到了错误,那么如何以正确的方式执行此操作,以便我能够在集合中添加我想要的任何类型?
最佳答案
一个List<? super Number>
表示 Number 列表,或继承树中 Number 之上的类型。所以
-
List<Number>
符合条件:您可以将任何类型的数字添加到List<Number>
-
List<Serializable>
符合条件:您可以将任何类型的数字添加到List<Serializable>
-
List<Object>
符合条件:您可以将任何类型的数字添加到List<Object>
-
List<Integer>
不符合条件:您不得将任何类型的数字添加到List<Integer>
关于java - 整数扩展数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20936890/