这里怎么了?我得到一个java.lang.ClassCastException错误,但我可以';I don’我看不出我哪里做错了
这是我第一次真正使用列表和队列,所以这可能是一个非常简单的错误。是因为我的队列中充满了无法转换为整数的对象吗这里怎么了?我得到一个java.lang.ClassCastException错误,但我可以';I don’我看不出我哪里做错了,java,arraylist,queue,classcastexception,Java,Arraylist,Queue,Classcastexception,这是我第一次真正使用列表和队列,所以这可能是一个非常简单的错误。是因为我的队列中充满了无法转换为整数的对象吗 //populate array for(int i=0; i<11; i++){ numberarray[i] = i; } // populate list with numbers from array List numList = Arrays.asList(nu
//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);
//填充数组
对于(int i=0;i我猜问题在这里:
Arrays.asList(numberarray);
如果numberarray
是int[]
而不是Integer[]
,那么该调用将实际返回一个List
的int[]
数组,其中包含该数组作为一个元素
当您尝试将int[]
对象强制转换为整数时,ClassCastException
会在稍后发生
由于Java不支持基元集合,因此使用数组没有简单的方法。asList
包装基元数组-自动装箱不会像那样大量工作。如果您计划使用整数[]
来支持集合,最好从使用它开始
部分混淆源于该方法采用的事实。如果它只是采用T[]
作为参数,编译器将不允许您传入int[]
,因为基元数组不扩展Object[]
。但是有了varargs支持,编译器将T
推断为int[]
并认为您的意思是构建一个由单个元素支持的列表int[][]
正如其他人所指出的,使用将真正帮助您解决这样的歧义,使用它们编程总是一个好主意:
List<Integer> numList = Arrays.asList(numberarray);
List numList=Arrays.asList(numberraray);
此行给出以下编译错误,而不是允许代码在运行时失败:
不兼容类型
必需:java.util.List
found:java.util.List
旁注:假设您使用整数[]
不要忘记,这意味着元素现在可以是null
。如果是这种情况,当您取消装箱回到int
时,将抛出NullPointerException
——只需小心确保您的实现不允许null
元素,或者在取消装箱之前检查null
。我猜我是这样想的问题就在这里:
Arrays.asList(numberarray);
如果numberarray
是int[]
而不是Integer[]
,那么该调用将实际返回一个List
的int[]
数组,其中包含该数组作为一个元素
当您尝试将int[]
对象强制转换为整数时,ClassCastException
会在稍后发生
由于Java不支持基元集合,因此使用数组没有简单的方法。asList
包装基元数组-自动装箱不会像那样大量工作。如果您计划使用整数[]
来支持集合,最好从使用它开始
部分混淆源于该方法采用的事实。如果它只是采用T[]
作为参数,编译器将不允许您传入int[]
,因为基元数组不扩展Object[]
。但是有了varargs支持,编译器将T
推断为int[]
并认为您的意思是构建一个由单个元素支持的列表int[][]
正如其他人所指出的,使用将真正帮助您解决这样的歧义,使用它们编程总是一个好主意:
List<Integer> numList = Arrays.asList(numberarray);
List numList=Arrays.asList(numberraray);
此行给出以下编译错误,而不是允许代码在运行时失败:
不兼容类型
必需:java.util.List
found:java.util.List
旁注:假设您使用整数[]
不要忘记,这意味着元素现在可以是null
。如果是这种情况,当您取消装箱回到int
时,将抛出NullPointerException
——只需小心确保您的实现不允许null
元素,或者在取消装箱之前检查null
。您真的需要这样做吗应该使用泛型和ArrayList/ArrayDeque,除非它确实是性能关键型的,并且您使用了很多原子类型,比如int
您确实应该使用泛型和ArrayList/ArrayDeque,除非它对性能非常关键,并且您使用了许多原子类型,如int。然后您应该看看
您得到的ClassCastException
是什么?为什么不使用泛型来确保类型安全?java.util.Arrays$ArrayList不能转换为java.lang.Integer…泛型是指List吗?我的意思是List
。原语不能用作类型参数谢谢..我试着用List代替List。什么是类CastException
您得到了什么?为什么不使用泛型来确保类型安全?java.util.Arrays$ArrayList不能转换为java.lang.Integer…泛型是指List吗?我的意思是List
。原语不能用作类型参数谢谢..我尝试的是List而不是List。您是对的..我再次运行了它,得到了..int[]无法转换为java.lang.IntegerThanks作为旁注。我想在我的android设备上测试了几次并查看了我的代码后,我的实现不允许在队列末尾使用null元素。谢谢这篇文章真的帮助了我!@ConnorAtherton-很高兴我能帮上忙!你是对的。我再次运行了它,得到了..int[]无法转换为java.lang.IntegerThanks作为旁注。我想在我的android设备上测试了几次并查看了我的代码后,我的实现不允许在队列末尾使用null元素。谢谢这篇文章真的帮助了我!@ConnorAtherton-很高兴我能帮上忙!