Widzę, że niektóre rozwiązania zostały dostarczone, ale nie ma żadnych przyczyn, więc wyjaśnię to szczegółowo, ponieważ uważam, że równie ważne jest wiedzieć, co robiłeś źle, aby uzyskać „coś”, co działa na podstawie podanych odpowiedzi.
Najpierw zobaczmy, co ma do powiedzenia 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.
To może nie wyglądać na ważne, ale jak zobaczysz, to jest ... Więc co zawiedzie następująca linia? Wszystkie obiekty na liście są ciągiem, ale nie konwertuje ich, dlaczego?
List<String> tList = new ArrayList<String>();
tList.add("4");
tList.add("5");
String tArray[] = (String[]) tList.toArray();
Prawdopodobnie wielu z was pomyśli, że ten kod robi to samo, ale tak nie jest.
Object tSObjectArray[] = new String[2];
String tStringArray[] = (String[]) tSObjectArray;
Kiedy w rzeczywistości napisany kod robi coś takiego. Jawadok to mówi! Ustanowi nową tablicę, czym będzie Obiektów !!!
Object tSObjectArray[] = new Object[2];
String tStringArray[] = (String[]) tSObjectArray;
Zatem tList.toArray tworzy instancję Obiektów, a nie Ciągów ...
Dlatego naturalnym rozwiązaniem, o którym nie wspomniano w tym wątku, ale to, co zaleca Oracle, jest następujące
String tArray[] = tList.toArray(new String[0]);
Mam nadzieję, że to dość jasne.