Java 正在引发类强制转换异常 int[]arr={1,2,4,3,6,3,2,9}; Collection c=新的HashSet((Collection)Arrays.asList(arr)); 用于(整数x:c) { 系统输出打印(x); }
上面的代码正在引发classcast异常。有人能帮忙吗?请不要使用,一定要使用菱形运算符Java 正在引发类强制转换异常 int[]arr={1,2,4,3,6,3,2,9}; Collection c=新的HashSet((Collection)Arrays.asList(arr)); 用于(整数x:c) { 系统输出打印(x); },java,exception,Java,Exception,上面的代码正在引发classcast异常。有人能帮忙吗?请不要使用,一定要使用菱形运算符,不要像那样尝试向集合添加基元数组- int [] arr = {1,2,4,3,6,3,2,9}; Collection<Integer> c = new HashSet<Integer>((Collection)Arrays.asList(arr)); for(int x : c) { System.out.print(x);
,不要像那样尝试向集合添加基元数组-
int [] arr = {1,2,4,3,6,3,2,9};
Collection<Integer> c = new HashSet<Integer>((Collection)Arrays.asList(arr));
for(int x : c)
{
System.out.print(x);
}
返回一个列表
请不要使用,一定要使用菱形运算符
,不要像这样尝试向集合
添加基元数组-
int [] arr = {1,2,4,3,6,3,2,9};
Collection<Integer> c = new HashSet<Integer>((Collection)Arrays.asList(arr));
for(int x : c)
{
System.out.print(x);
}
返回一个列表数组。asList
获取一个对象数组(一个对象[]
)int
s不是对象,这意味着不可能将int[]
解释为对象[]
——为此,arr
必须是Integer[]
。(请始终记住,基本体和对象是根本不同的,即使编译器有时会方便地为您在它们之间进行转换。)
但是int[]
本身就是一个对象。这意味着Arrays.asList(arr)
可以使用varargs功能来打开:
int[] arr;
Arrays.asList(arr);
进入:
这是一个单元素数组,其唯一元素的类型为int[]
——一个数组数组
换句话说,Arrays.asList
的输入被解释为单个对象(int[]arr
),然后被包装成一个单元素的对象数组。因此,结果类型是List
然后,将此列表
转换为集合
。这意味着当您获取第一个项目(即int[]
)时,它将转换为整数。这就是导致你的ClassCastException的原因
相反,您应该直接使用varargs:
Arrays.asList(new int[][] { arr })
如果这样做,编译器就别无选择,只能将每个元素视为一个对象。它将通过自动将每一个装箱成一个整数来实现这一点。最终的结果是这样的:
Arrays.asList(1, 2, 4, 3, 6, 3, 2, 9)
作为一条一般性建议,选中的警告是有原因的。在您对泛型和擦除非常熟悉之前,我建议您不要抑制它们。ClassCastException在您尝试从集合中提取某些内容之前不会发生,这可能要比您将这些元素放入另一个类时发生得晚得多,也可能发生在另一个类中。数组。asList
获取一个对象数组(一个对象[]
)int
s不是对象,这意味着不可能将int[]
解释为对象[]
——为此,arr
必须是Integer[]
。(请始终记住,基本体和对象是根本不同的,即使编译器有时会方便地为您在它们之间进行转换。)
但是int[]
本身就是一个对象。这意味着Arrays.asList(arr)
可以使用varargs功能来打开:
int[] arr;
Arrays.asList(arr);
进入:
这是一个单元素数组,其唯一元素的类型为int[]
——一个数组数组
换句话说,Arrays.asList
的输入被解释为单个对象(int[]arr
),然后被包装成一个单元素的对象数组。因此,结果类型是List
然后,将此列表
转换为集合
。这意味着当您获取第一个项目(即int[]
)时,它将转换为整数。这就是导致你的ClassCastException的原因
相反,您应该直接使用varargs:
Arrays.asList(new int[][] { arr })
如果这样做,编译器就别无选择,只能将每个元素视为一个对象。它将通过自动将每一个装箱成一个整数来实现这一点。最终的结果是这样的:
Arrays.asList(1, 2, 4, 3, 6, 3, 2, 9)
作为一条一般性建议,选中的警告是有原因的。在您对泛型和擦除非常熟悉之前,我建议您不要抑制它们。ClassCastException不会发生,直到您尝试从集合
中提取某些内容时才会发生,这可能比您将这些元素放入另一个类时发生的要晚得多,也可能发生在另一个类中。哪一行会引发异常?上载堆栈跟踪哪一行会引发异常?上载堆栈跟踪