openjdk의 java.util.Arrays에서이 코드를 이해하는 데 문제가 있습니다. 나는 왜이 코드가 reflection (Array.newInstance)을 사용하는지, 왜 형식이 같은지 확인하는 이유는 무엇인지 궁금하다. T와 U 유형이 다르더라도 왜 T [] copy = (T []) new Object [newLength]를 할 수 없습니까?Java에서 Arrays.copyOf 소스 코드가 왜 리플렉션을 사용합니까?
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
왜 Array.newInstance가 리플렉션이라고 생각하십니까? AIUI 그것은 매개 변수화 된 클래스의 배열을 생성하는 "일반적인"방법 일뿐입니다. –
@Andrzej 클래스는'java.lang.reflect' 패키지의 일부로, 왜 내가 반성을 취한 것인지 꽤 좋은 논쟁으로 생각합니다. 실제로는 네이티브 메소드입니다 - 아마도 JVM 내장 함수 일 수도 있습니다. – Voo
@Voo Touché, 나는 그 패키지를 알아 차리지 못했다. (자동 가져 오기로 모든 IDE를 쉽게 만들 수있다 ... :)). –