Vedo che sono state fornite alcune soluzioni, ma non alcuna causa, quindi lo spiegherò in dettaglio poiché ritengo sia importante sapere che cosa hai fatto di sbagliato piuttosto che ottenere "qualcosa" che funzioni dalle risposte fornite.
Innanzitutto, vediamo cosa ha da dire Oracle
* <p>The returned array will be "safe" in that no references to it are
* maintained by this list. (In other words, this method must
* allocate a new array even if this list is backed by an array).
* The caller is thus free to modify the returned array.
Potrebbe non sembrare importante, ma come vedrai è ... Quindi, cosa fallisce la seguente riga? Tutti gli oggetti nell'elenco sono String ma non li converte, perché?
List<String> tList = new ArrayList<String>();
tList.add("4");
tList.add("5");
String tArray[] = (String[]) tList.toArray();
Probabilmente, molti di voi penserebbero che questo codice stia facendo lo stesso, ma non lo è.
Object tSObjectArray[] = new String[2];
String tStringArray[] = (String[]) tSObjectArray;
Quando in realtà il codice scritto sta facendo qualcosa del genere. Lo dice javadoc! Istituirà un nuovo array, quello che sarà degli Oggetti !!!
Object tSObjectArray[] = new Object[2];
String tStringArray[] = (String[]) tSObjectArray;
Quindi tList.toArray sta creando un'istanza di un oggetto e non di stringhe ...
Pertanto, la soluzione naturale che non è stata menzionata in questo thread, ma è ciò che Oracle consiglia è la seguente
String tArray[] = tList.toArray(new String[0]);
Spero sia abbastanza chiaro.