openjdkのjava.util.Arraysのこのコードを理解できません。私はなぜこのコードがリフレクション(Array.newInstance)を使用しているのか、型が同じかどうかをチェックするのが不思議です。なぜT [] copy =(T [])new Object [newLength]は型Tと型Uが異なっていてもできないのですか?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
@VooTouché、私はそのパッケージに気づいたことはありません。 –