这里怎么了?我得到一个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-很高兴我能帮上忙!