我正在尝试将List类型数据集合转换为数组。
public void method1(List s1){
List s=s1;
String []array = new String[s.size()];
array=(String[])s.toArray();
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
然后发生以下类强制转换异常。错误行是“array =(String [])s.toArray();”线。
java.lang.ClassCastException:[Ljava.lang.Object;无法转换为[Ljava.lang.String;
原因是什么?
答案 0 :(得分:2)
List.toArray()
是接口 List
中的方法,文档未指定方法返回的数组类型。但是,与建议的其他答案不同,List.toArray()
方法不能返回列表的泛型类型的数组,因为在运行时不知道列表的泛型类型。
正因为如此,标准API内置的List
的所有实现都返回Object[]
,而不是String[]
。
但是,您可以将自己预先分配的数组传递给方法List.toArray(Object[])
。如果这样做,则可以保证获得与传入的数组具有相同元素类型的返回值。如果传入的数组与列表本身具有相同的大小,则将使用该数组(否则,在内部分配一个适当大小的新数组
这将解决它:
public void method1(List s) {
String[] array = s.toArray(new String[s.size()]); // <-- pass the array as an argument
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
答案 1 :(得分:1)
您没有为列表指定泛型类型,并且您将数组声明为字符串数组。这应该有效:
public void method1(List<String> s1){
List<String> s=s1;
String []array = new String[s.size()];
array = (String[])s.toArray(array);
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
}
修改强>
您应该使用List#toArray()而不是返回Object[]
的{{3}},而List#toArray(T[] a)会返回作为参数传入的类型。