java: (String[])List.toArray() gives ClassCastException

Gavriel picture Gavriel · Apr 17, 2011 · Viewed 80.1k times · Source

The following code (run in android) always gives me a ClassCastException in the 3rd line:

final String[] v1 = i18nCategory.translation.get(id);
final ArrayList<String> v2 = new ArrayList<String>(Arrays.asList(v1));
String[] v3 = (String[])v2.toArray();

It happens also when v2 is Object[0] and also when there are Strings in it. Any Idea why?

Answer

MeBigFatGuy picture MeBigFatGuy · Apr 17, 2011

This is because when you use

 toArray() 

it returns an Object[], which can't be cast to a String[] (even tho the contents are Strings) This is because the toArray method only gets a

List 

and not

List<String>

as generics are a source code only thing, and not available at runtime and so it can't determine what type of array to create.

use

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

which allocates the right kind of array (String[] and of the right size)