get()メソッド()を使用すると、この例外がスローされないのはなぜですか?
これには2つの理由があります
- 何の要素があなたのプログラムに
array
に追加されなかったと仮定するとは、array
はnull
値のsz
数で初期化されようとしている。..声明(T)array[index]
ですをT
にキャストしようとしています(T
は基本的にタイプ消去によってObject
に置き換えられます)。 null
はどのタイプにもキャストすることができますので、これは問題ではありません。
- いくつかの要素は、あなたのプログラムの中で
array
に追加されていると仮定すると、声明(T)array[index]
が問題なく動作することを唯一の方法はある位置index
の要素がArray
をインスタンス化するために使用されるのと同じタイプまたはサブタイプである場合(例えばArray<Number> arr = new Array<Number>
をし、しかし、arr[index]
でString
を挿入してみて、あなたも同様にget
方法からClassCastException
を取得するためにバインドされている)
なぜコンパイラは(それを言うん; arr[index]
は、これは問題にならないだろう1です。 T [])配列がチェックされていないcast、そしてClass私が担当者を使用する場合CastExceptionが
)(スローされますがClassCastException
を取得するための唯一の方法は、T
に代表されるタイプがarray
が保持できる要素の型と同じではないということです。たとえば、何かをしてClassCastException
になり、次のように:ここでは
Array<Integer> a = new Array<Integer>();
Integer[] intArray = a.rep();//ClassCastException
は、T[]
はInteger[]
がそうコードをコンパイルするには問題がない表し、ただし、実行時にarray
はObject[]
です。 Object
の配列はInteger
の配列にダウンキャストできません。また、配列が他のクラスとは異なりJVMによって動的に作成されることを知るのに役立ちます。
これを修正する1つの方法は、Array
をArray<Object> arr = new Array<Object>
としてインスタンス化することです。
問題はジェネリックには何もありません。これは面白いことができます:[here](http://stackoverflow.com/a/13647072/5333936) – Blobonat
短い答え:消去のためジェネリックタイプにキャストできません。 'Object []'の代わりに 'List'を使ってください。 –
VGR