Convertendo um List<String> em String[]

Olá!
Ao executar o código

String[] d = (String[]) usuarios.toArray();

Obtive a seguinte exceção

Caused by javax.faces.FacesException with message: "#{administrarUsuarioAction.enviarConvite(enviarConviteForm)}: javax.ejb.EJBTransactionRolledbackException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;"

Existe alguma maneira padrão da API para fazer isto? Ou vou ter que criar um array com o tamanho do List e ir iterando adicionando o conteudo do List no array?

Abraço!

Hum…

// Java 5.0
String[] d = usuarios.toArray(new String[0]);
// Java 1.4 ou anterior
String[] d = (String[]) usuarios.toArray(new String[0]);

Me pergunto por que os desenvolvedores do Java não fizeram um Collection.toArray() retornar um T[] direto, ao invés de Object[].

Por experiência própria digo que trabalhar com arrays usando tipos genéricos é um filme de terror dos piores.

Hum… isso é um subproduto da definição de Generics do Java. Você necessita passar como parâmetro alguma coisa que indique o tipo, para que a API possa retornar um array desse tipo. Por exemplo, toArray necessita receber um String[] para retornar um String[]; poderia haver uma API que recebesse uma String.class, por exemplo.