아이템 32. 핵심 정리 12:00 이 부분에서 질문이 있습니다.
제가 이해한 내용으로 적는 거라서 틀릴 수도 있지만, 답변 남겨봅니다.(틀린 내용 있으면 피드백해주세요!)먼저 질문자님이 주신 예시 코드의 경우에는 Object obj = new Object(); obj = "test"; // 추상적인 Object 에 담음 String string = (String) obj; //이 경우에는 "test" 객체 자체가 String 클래스이므로 캐스팅을 이용해서 String Object의 이동이 자유롭습니다.반면에 toArray(T... args)의 경우 가변 인수를 Object[]를 생성합니다.(194p 3번째 줄, 이 부분에 대한 자세한 내용은 타입 이레이저(Type Erasure)를 검색해보시면 될 꺼 같습니다.)가변 인수를 보관하는 Object[] 객체는 위에서 "test"라는 '객체 자체'가 String이라서 String Object 캐스팅이 자유로웠던 것과는 달리 Object[]가 String[]으로 다운 캐스팅될 수 없습니다.그래서 String[] attributes = (String[]) Object[] 이 부분에서 컴파일러의 캐스팅 과정 중 에러가 발생하는 거라고 생각하시면 될 것 같습니다.제 블로그에 더 자세하게 Type Erasure 과정과 함께 타입 에러 발생 과정을 적어두었으니 필요하시다면 참고해주세요!이펙티브 자바 질문 글과 함께 아이템 32 살펴보기