我有一个ArrayList通用通配符类型,它将Number作为extends。我试图将整数值添加到ArrayList。
但它给我一个错误说
ArrayList<? extends Number> numberList = new ArrayList<Number>();
numberList = new ArrayList<Integer>();
numberList.add(100);
类型
ArrayList<capture#2-of ?>
中的add(int,capture#2-of?)方法不适用于参数(int)。
我也试过这种方式,但是给了我同样的错误
ArrayList<?> numberList = new ArrayList<Number>();
numberList = new ArrayList<Integer>();
numberList.add(100);
错误是:
类型
ArrayList<capture#2-of ?>
中的add(int,capture#2-of?)方法不适用于参数(int)
答案 0 :(得分:2)
你不能。 ? extends
部分基本上告诉编译器:它是某种类型,我不知道,但扩展了Number。
因此,编译器无法保证您要添加的任何类型与未知类型兼容。因此,您无法为此类集合添加任何内容。
答案 1 :(得分:2)
您不能将整数添加到列表中,因为它可能是Float列表,而不是Integer列表。
你可以这样做:
ArrayList<? super Number> numberList = new ArrayList();
numberList.add(100);
或只是
ArrayList<Number> numberList = new ArrayList();
numberList.add(100);
答案 2 :(得分:1)
你可以使用;
ArrayList <? super Number> numberList = new ArrayList<Number>();
Number number = 1;
numberList.add(number);
or
numberList.add(1);
答案 3 :(得分:1)
你应该做这样的事情
ArrayList<? super Number> numberList = new ArrayList<Number>();
numberList.add(100);
对于java 8,您可以使用stream(),
// to resolve your read problem cause by <? super>
ArrayList<? super Number> arrayList = new ArrayList<Number>();
arrayList.add(100);
List<Integer> list = arrayList.stream().map(e->(Integer) e).collect(Collectors.toList());
System.out.println(list);
答案 4 :(得分:0)
可能的解决方法:
List<? extends Number> numberList = new ArrayList<Number>();
List<Integer> integerList = new ArrayList<>():
integerList.add(100);
numberList = integerList;