Bazı çözümlerin sağlandığını görüyorum, ancak herhangi bir neden yok, bu yüzden, verilen cevaplardan işe yarayan "bir şey" almanın neyi yanlış yaptığınızı bilmenin önemli olduğuna inandığım için ayrıntılı olarak açıklayacağım.
İlk olarak, Oracle'ın ne söylediğine bakalım
* <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.
Önemli görünmeyebilir, ancak göreceğiniz gibi ... Peki aşağıdaki satır başarısız olur? Listedeki tüm nesneler Dize'dir ancak bunları dönüştürmez, neden?
List<String> tList = new ArrayList<String>();
tList.add("4");
tList.add("5");
String tArray[] = (String[]) tList.toArray();
Muhtemelen, birçoğunuz bu kodun aynı şeyi yaptığını düşünürsünüz, ama yapmaz.
Object tSObjectArray[] = new String[2];
String tStringArray[] = (String[]) tSObjectArray;
Gerçekte yazılı kod böyle bir şey yapıyorsa. Javadoc bunu söylüyor! Nesnelerin ne olacağını, yeni bir dizi instatiate olacak !!!
Object tSObjectArray[] = new Object[2];
String tStringArray[] = (String[]) tSObjectArray;
Yani tList.toArray, Dizeleri değil Nesneleri somutlaştırıyor ...
Bu nedenle, bu konuya değinilmeyen doğal çözüm, ancak Oracle'ın önerdiği şey şudur:
String tArray[] = tList.toArray(new String[0]);
Umarım yeterince açıktır.