나는 어떤 해결책이 제공되었지만 어떤 원인도 제공하지 않았 음을 알기 때문에 주어진 답장에서 작동하는 "뭔가"를 얻는 것이 잘못되었다는 것을 아는 것이 중요하다고 생각하기 때문에 이것을 자세히 설명 할 것입니다.
먼저, 오라클의 의견을 살펴 보겠습니다
* <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는 문자열이 아닌 객체를 인스턴스화합니다 ...
따라서이 스레드에서 언급하지 않았지만 Oracle이 권장하는 자연 솔루션은 다음과 같습니다.
String tArray[] = tList.toArray(new String[0]);
충분히 명확하길 바랍니다.