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