人生最曼妙的风景,竟是内心的淡定与从容!
(T[]) Arrays.copyOf(elementData, size, a.getClass()); 강제 변환은 배열 자체의 타입이 a.getClass()이기 때문에 성공할 수 있습니다.
(T[]) Arrays.copyOf(elementData, size, a.getClass());
a.getClass()
Array.newInstance(newType.getComponentType(), newLength)을 통해 생성된 배열 객체(대상 유형)입니다.
Array.newInstance(newType.getComponentType(), newLength)
String[] y = (String[]) x.toArray()은 array의 데이터 유형이 Object[]이 아닌 String[]이므로 형변환할 수 없습니다.
String[] y = (String[]) x.toArray()
array
Object[]
String[]
String은 Object의 하위 클래스이지만 String[]은 Object[]의 하위 클래스가 아니므로 실제 유형이 String인 Object에 대한 참조는 String으로 캐스팅될 수 있습니다. 하지만 Object[]을 String[]에 강제로 적용할 수는 없습니다. 할당은 하나씩만 사용할 수 있으며 참조를 하나씩 강제로 적용한 다음 복사할 수 있습니다(물론 Arrays.copyOf()를 사용하여 이를 수행할 수 있습니다.
String
Object
Arrays.copyOf()
하위 클래스의 값을 다시 하위 클래스
Object[]의 값을 String[]으로 캐스팅합니다. 이 동작은 (Integer)(new Object())
(Integer)(new Object())
ArrayListE의 일반 유형은 일반 유형이 지정되지 않은 경우 필요하지 않습니다. 예:
E
이 경우 두 번째 방법은 적용할 수 없으며 강제 형식 변환을 수행할 방법도 없습니다
으아악(T[]) Arrays.copyOf(elementData, size, a.getClass());
강제 변환은 배열 자체의 타입이a.getClass()
이기 때문에 성공할 수 있습니다.Array.newInstance(newType.getComponentType(), newLength)
을 통해 생성된 배열 객체(대상 유형)입니다.String[] y = (String[]) x.toArray()
은array
의 데이터 유형이Object[]
이 아닌String[]
이므로 형변환할 수 없습니다.String
은Object
의 하위 클래스이지만String[]
은Object[]
의 하위 클래스가 아니므로 실제 유형이String
인Object
에 대한 참조는String
으로 캐스팅될 수 있습니다. 하지만Object[]
을String[]
에 강제로 적용할 수는 없습니다. 할당은 하나씩만 사용할 수 있으며 참조를 하나씩 강제로 적용한 다음 복사할 수 있습니다(물론Arrays.copyOf()
를 사용하여 이를 수행할 수 있습니다.하위 클래스의 값을 다시 하위 클래스
로 변환하는 것이 적법합니다.Object[]의 값을 String[]으로 캐스팅합니다. 이 동작은
과 유사합니다.(Integer)(new Object())
ArrayList
으아악E
의 일반 유형은 일반 유형이 지정되지 않은 경우 필요하지 않습니다. 예:이 경우 두 번째 방법은 적용할 수 없으며 강제 형식 변환을 수행할 방법도 없습니다