java: (String[])список.toArray () дает ClassCastException
Следующий код (запускаемый в android) всегда дает мне ClassCastException в 3-й строке:
final String[] v1 = i18nCategory.translation.get(id);
final ArrayList<String> v2 = new ArrayList<String>(Arrays.asList(v1));
String[] v3 = (String[])v2.toArray();
Это происходит также, когда v2 является объектом[0], а также Когда в нем есть строки. Есть идеи, почему?
2 ответа:
Это потому, что при использовании
toArray()
Он возвращает объект [], который не может быть приведен к строке [] (даже если содержимое строки) это потому, что метод toArray получает только
List
И не
List<String>
Поскольку генераторы-это только исходный код, и они не доступны во время выполнения, и поэтому он не может определить, какой тип массива создать.
Использовать
toArray(new String[v2.size()]);
Который выделяет правильный тип массива (String[] и нужного размера)
Вы используете неправильный
Помните, что дженерики Java-это в основном синтаксический сахар. ArrayList на самом деле не знает, что все его элементы являются строками.toArray()
Чтобы решить вашу проблему, позвоните
toArray(T[])
. В вашем случаеОбратите внимание, что обобщенная формаString[] v3 = v2.toArray(new String[v2.size()]);
toArray(T[])
возвращаетT[]
, поэтому результат не должен быть явно приведен.