在 Java 中将 int 的原始数组转换为 ArrayList:“java.lang.ClassCastException:[我无法转换为 java.lang.Integer”

Posted

技术标签:

【中文标题】在 Java 中将 int 的原始数组转换为 ArrayList:“java.lang.ClassCastException:[我无法转换为 java.lang.Integer”【英文标题】:Converting primitive array of int into ArrayList in Java: "java.lang.ClassCastException: [I cannot be cast to java.lang.Integer" 【发布时间】:2021-02-03 20:42:59 【问题描述】:

我想知道如何将原始整数数组转换为整数列表?

没有编译错误:

    int[] nums = 0, 1;
    List<Integer> list = new ArrayList(Arrays.asList(nums));
    list.get(0);

但是这个:

    int[] nums = 0, 1;
    List<Integer> list = new ArrayList(Arrays.asList(nums));
    int a = list.get(0);

失败:

java.lang.ClassCastException: class [I cannot be cast to class java.lang.Integer ([I and java.lang.Integer are in module java.base of loader 'bootstrap') 

【问题讨论】:

int 和 Integer 不一样 请注意new ArrayList( 几乎自动成为一个错误;那是一个“raw type”,并告诉编译器忽略它对类型系统的了解。您应该改为写new ArrayList&lt;&gt;(。这样你会在编译时得到一个适当的错误,让你知道你的类型不匹配,而不是在运行时ClassCastException 另外——你写的第一个例子“没有编译错误”,但实际上没有一个产生编译错误。 谢谢@ruakh!好点 :) 我 99% 同意你的观点。我可能是错的,但我认为当类型已经在List &lt;Integer&gt; 中定义时,在ArrayList&lt;Ingeger&gt;( 中添加&lt;Integer&gt; 是不必要的,ArrayList( 很好(或者甚至更好)。如果我错了,请纠正我。 @NavidVafaei:从 OP 的示例中可以看出,编译器允许类似 List&lt;Integer&gt; list = new ArrayList(Arrays.asList("string")) 的内容,即使它会在运行时引发异常。请注意,我建议添加&lt;Integer&gt;;我建议添加&lt;&gt;,如List&lt;Integer&gt; list = new ArrayList&lt;&gt;(Arrays.asList("string"))&lt;&gt; 要求编译器推断类型,因此它不是原始类型,并且在编译时而不是运行时检测到问题。 【参考方案1】:

解决方案 1:

在 Java 8 中:

List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toCollection(ArrayList::new));

注意:您可能需要:

import java.util.stream.Collectors;

解决方案 2:

使用 for 循环:

List<Integer> list = new ArrayList();
for(int n : nums) 
    list.add(n);

解决方案 3:

将原始数组声明为Ingeger[] 而不是int[]

Integer[] nums = 0, 1;

【讨论】:

【参考方案2】:

代码 Arrays.asList(nums) 不会转换为具有 2 个值的 ArrayList,即。 1 和 2。它只有一个值,int[] 1, 2 。为了创建正确的ArrayList,您应该使用

List&lt;Integer&gt; list = Arrays.stream(nums).boxed().collect(Collectors.toList());

【讨论】:

以上是关于在 Java 中将 int 的原始数组转换为 ArrayList:“java.lang.ClassCastException:[我无法转换为 java.lang.Integer”的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中将字符串数组转换为int数组[重复]

如何在 Java 中将 Integer[] 转换为 int[] 数组?

在java中将整数列表转换为整数数组[重复]

如何在 java 中将 Object[] 转换为 int[]

在Java中将字符串转换为“字符”数组

如何在 Swift 中将数值数据数组转换为 RAW 图像数据?