这是我第一次真正使用列表和队列,所以这可能是一个非常简单的错误。是因为我的队列中充满了无法转换为整数的对象吗?
//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);
如果numberarray
是一个 int[]
而不是 Integer[]
,那么该调用实际上将返回一个 List
的 int[]
s 包含该数组作为一个元素。
ClassCastException
稍后当您尝试转换 int[]
时会发生反对 Integer
.
由于 Java 不支持原始集合,所以没有简单的方法来使用 Arrays.asList
包装原始数组 - 自动装箱不能像那样整体工作。最好开始使用 Integer[]
如果你打算用它来支持 Collection
.
部分混淆来自于方法 asList(T...)
需要 varargs .如果它只花了 T[]
相反,作为参数,编译器不会让您传入 int[]
。因为原始数组不扩展 Object[]
.但是有了 varargs 支持,编译器会推断出 T
作为int[]
并认为你的意思是 build 一个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
开箱前。
关于java - 这里有什么问题?我收到 java.lang.ClassCastException 错误,但我看不出哪里出了问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10676185/