Java中将String的ArrayList转换为String数组:
如果运行:
String[] result = (String[]) INPUT_LIST.toArray();
得到错误:
java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.String;
抛出了ClassCastException 。这是因为Java的泛型类型只在编译时存在;而在运行时,toArray()方法返回的数组并不知道其元素的具体类型,它们可以是String、Integer,甚至可以是不同类型的混合,因为Object类是所有其他类型的超类型。Java 抛出ClassCastException并拒绝Object[]到String[]的转换。
1、使用循环
String[] result = new String[INPUT_LIST.size()];
for (int i = 0; i < INPUT_LIST.size(); i++) {
result[i] = INPUT_LIST.get(i);
}
2、使用toArray(T[] a)方法
Collection接口定义了一个带有参数T[] a的toArray()方法:
String[] result = new String[INPUT_LIST.size()];
INPUT_LIST.toArray(result);
3、使用流API
String[] result = INPUT_LIST.stream().toArray(String[]::new);
Stream的toArray()方法接受一个生成器函数,该函数以所需的类型分配返回的数组。在这种情况下,我们可以简单地将String[]的构造函数作为方法引用,并将其作为函数传递给toArray() 。
4、Java 11+
如果我们使用Java 11或更高版本,我们可以直接调用Collection.toArray(generatorFunc)来获取转换后的数组,而无需先将列表转换为Stream:
String[] result = INPUT_LIST.toArray(String[]::new);