3
私は次の簡単なコードを持っている:コードが汎用で動作し、非永続クラスで動作しないのはなぜですか?
class GenClass<T> {
T method1(T in) {
T[] arr = (T[])new Object[10];
arr[1] = in;
return arr[1];
}
}
public class TestClass {
public static void main(String[] args) {
GenClass<Integer> cl = new GenClass<>();
System.out.println(cl.method1(1000));
Integer[] arr = (Integer[])new Object[10];
arr[1] = 1000;
System.out.println(arr[1]);
}
}
結果は以下の通りであるだけでなく
1000
Exception in thread "main" java.lang.ClassCastException:
[Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
at javaapplication8.TestClass.main(TestClass.java:17)
Java Result: 1
、なぜこのコードの動作:
T[] arr = (T[])new Object[10];
と、このコードのスローを実行時エラー:
Integer[] arr = (Integer[])new Object[10];
?
タイプ消去のためですか?
もしそうなら - 実行時に「T」は、単にソースコードので法1で「オブジェクト」と交換されている:
T[] arr = (T[])new Object[10];
は、実行時に次のようになりました:
Object[] arr = (Object[])new Object[10];
?
または何か別のものがありますか?
キーワードである[型消去](https://docs.oracle.com/javase/tutorial/java/generics/bridgeMethods.html)、すなわちでObject [] arr =(Object [])new Object [10]; 'になります。 – Thomas
[Javaジェネリック型消去の可能性のある複製時](http://stackoverflow.com/questions/339699/java-generics-type-erasure-when-and-what-happens) – Tom