列表的原因是什么,无法转换为数组?

时间:2014-11-27 13:47:30

标签: java arrays list arraylist classcastexception

我正在尝试将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;

原因是什么?

2 个答案:

答案 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)会返回作为参数传入的类型。