ฉันเห็นว่ามีการแก้ปัญหาบางอย่าง แต่ไม่มีสาเหตุใด ๆ ดังนั้นฉันจะอธิบายอย่างละเอียดเนื่องจากฉันเชื่อว่าการรู้ว่าคุณกำลังทำอะไรผิดที่สำคัญเพียงเพื่อให้ได้ "บางสิ่ง" ที่ได้ผลจากคำตอบที่ได้รับ
อันดับแรกให้ดูสิ่งที่ 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.
มันอาจดูไม่สำคัญ แต่อย่างที่คุณเห็นมันคือ ... ดังนั้นบรรทัดต่อไปนี้จึงล้มเหลว? วัตถุทั้งหมดในรายการเป็นสตริง แต่ไม่ได้แปลงทำไม?
List<String> tList = new ArrayList<String>();
tList.add("4");
tList.add("5");
String tArray[] = (String[]) tList.toArray();
อาจเป็นไปได้ว่าหลายคนคิดว่ารหัสนี้ทำแบบเดียวกัน แต่ก็ไม่ได้
Object tSObjectArray[] = new String[2];
String tStringArray[] = (String[]) tSObjectArray;
เมื่อในความเป็นจริงรหัสที่เขียนจะทำอะไรเช่นนี้ javadoc กำลังพูดมัน! มันจะสร้างอาเรย์ใหม่สิ่งที่จะเป็นของวัตถุ !!!
Object tSObjectArray[] = new Object[2];
String tStringArray[] = (String[]) tSObjectArray;
ดังนั้น tList.toArray กำลังทำให้วัตถุเป็นอินสแตนซ์ไม่ใช่ Strings ...
ดังนั้นทางออกธรรมชาติที่ไม่ได้กล่าวถึงในหัวข้อนี้ แต่เป็นสิ่งที่ Oracle แนะนำคือต่อไปนี้
String tArray[] = tList.toArray(new String[0]);
หวังว่ามันชัดเจนพอ