这是我第一次真正使用列表和队列,所以这可能是一个非常简单的错误。是因为我的队列充满了无法转换为整数的对象吗?
//populate array
for(int i=0; i<11; i++){
numberarray[i] = i;
}
// populate list with numbers from array
List numList = Arrays.asList(numberarray);
Collections.shuffle(numList);
Queue queue = new LinkedList();
queue.addAll(numList);
int num1 = (Integer) queue.poll();
assignPictures(button01, num1);
我的猜测是问题出在这里:
Arrays.asList(numberarray);
If numberarray
is an int[]
而不是一个Integer[]
,那么该调用实际上会返回一个List
of int[]
s 包含该数组作为一个元素。
The ClassCastException
稍后当您尝试投射时会发生int[]
反对Integer
.
由于 Java 不支持原始集合,因此没有简单的方法可以使用Arrays.asList
包装原始数组 - 自动装箱不起作用en masse像那样。最好开始使用Integer[]
如果您打算用它来支持Collection
.
部分混乱来自于该方法asList(T...) takes varargs。如果只需要一个T[]
作为参数,编译器不会让你传入一个int[]
因为原始数组不扩展Object[]
。但是有了 varargs 支持,编译器就会推断T
as int[]
并认为你的意思是建立一个List
由单个元素支持int[][]
.
正如其他人所指出的,使用generics真的会帮助你解决这样的歧义,使用它们进行编程总是一个好主意:
List<Integer> numList = Arrays.asList(numberarray);
此行给出以下编译错误,而不是让您的代码在运行时失败:
incompatible types
required: java.util.List<java.lang.Integer>
found: java.util.List<int[]>
边注:假设您转向使用Integer[]
不要忘记这意味着元素现在可以null
。如果是这种情况NullPointerException
当您拆箱返回时会被抛出int
- 只是要小心确保您的实施不允许null
元素或者检查null
拆箱之前。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)