将Object数组转换为String数组会抛出ClassCastException

Scr*_*kie 5 java arrays string object classcastexception

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

String[] names = (String[]) list.toArray(); // throws class cast exception.
Run Code Online (Sandbox Code Playgroud)

我不明白为什么?任何解决方案,解释表示赞赏.

das*_*ght 5

这是因为无参数toArray产生Objects 的数组。您需要调用将输出数组作为参数的重载,并传递一个Strings 数组,如下所示:

String[] names = (String[]) list.toArray(new String[list.size()]);
Run Code Online (Sandbox Code Playgroud)

在Java 5或更高版本中,可以删除演员表。

String[] names = list.toArray(new String[list.size()]);
Run Code Online (Sandbox Code Playgroud)

  • 这里的演员不是多余的吗?没有手头的编译器,但我不明白为什么不这样做。我认为,对一些关于co / contra方差的解释的链接也会使答案完整。 (2认同)