java: (String ) List.toArray () dá ClassCastException

O código a seguir (executado no android) sempre me dá um ClassCastException na terceira linha:

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

Acontece também quando v2 é Object [0] e também quando há Strings nele. Alguma ideia porque?

Isso ocorre porque quando você usa

  toArray() 

ele retorna um Object [], que não pode ser convertido em um String [] (mesmo que o conteúdo seja Strings) Isso ocorre porque o método toArray só recebe um

 List 

e não

 List 

como os genéricos são uma única coisa do código-fonte, e não estão disponíveis em tempo de execução e, portanto, não podem determinar que tipo de array criar.

usar

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

que aloca o tipo certo de array (String [] e do tamanho certo)

Você está usando o errado toArray()

Lembre-se que os genéricos de Java são principalmente açúcar sintático. Uma ArrayList não sabe realmente que todos os seus elementos são Strings.

Para corrigir seu problema, chame toArray(T[]) . No seu caso,

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

Observe que o formulário genérico toArray(T[]) retorna T[] , portanto, o resultado não precisa ser explicitamente convertido.