将对象数组转换为字符串数组会抛出ClassCastException异常。

5
List<String> list = getNames();//this returns a list of names(String).

String[] names = (String[]) list.toArray(); // throws class cast exception.

我不明白为什么?有解决方案或解释吗,谢谢。

2个回答

5
这是因为无参的toArray方法生成一个Object类型的数组。你需要调用重载版本并将输出数组作为参数传递,并传递一个String类型的数组,就像这样:
String[] names = (String[]) list.toArray(new String[list.size()]);

在Java 5或更新版本中,您可以省略强制转换。
String[] names = list.toArray(new String[list.size()]);

2
这里转换类型是否多余?我手头没有编译器,但我不知道为什么不行。此外,提供一些关于协变/逆变的解释的链接会使答案更完整。 - Voo
只有在Java 5及更高版本中才能使用;在Java 5之前是必需的。 - Sergey Kalinichenko
@dasblinkenlight 我不知道Java 5仍然普遍使用。 - user1181445
哦,对了,在Java 5之前就已经存在那个函数了,所以在那里确实有所不同。虽然我希望没有人真的再使用Java 1.4了。 - Voo

0

您正在尝试从一个 Object[] 类型的类中进行转换。该类本身是一个类型为 Object 的数组。您需要逐个进行转换,将元素添加到新数组中。

或者您可以使用已经实现的方法,通过执行以下操作:

list.toArray(new String[list.size()]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接