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 77

2 ответа:

Это потому, что при использовании

 toArray() 

Он возвращает объект [], который не может быть приведен к строке [] (даже если содержимое строки) это потому, что метод toArray получает только

List 

И не

List<String>

Поскольку генераторы-это только исходный код, и они не доступны во время выполнения, и поэтому он не может определить, какой тип массива создать.

Использовать

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

Который выделяет правильный тип массива (String[] и нужного размера)

Вы используете неправильный toArray()

Помните, что дженерики Java-это в основном синтаксический сахар. ArrayList на самом деле не знает, что все его элементы являются строками.

Чтобы решить вашу проблему, позвоните toArray(T[]). В вашем случае

String[] v3 = v2.toArray(new String[v2.size()]);
Обратите внимание, что обобщенная форма toArray(T[]) возвращает T[], поэтому результат не должен быть явно приведен.