gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:33:53 24 4
gpt4 key购买 nike

我正在尝试将列表类型数据集合转换为数组。

    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;

这是什么原因?

最佳答案

List.toArray()接口(interface)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]);
}
}

关于java - 列表无法转换为数组的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27172195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com