如何在泛型中将一个整数元素添加到通配符的ArrayList中?

时间:2016-08-08 11:29:53

标签: java generics arraylist integer

我有一个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)

5 个答案:

答案 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;