2016-09-19 9 views
0

ジェネリックスの動作を見てみると、クラスは通常のクラスにコンパイルされ、どこにも記述されていないタイプがあり、Objectクラスが渡されるタイプのチェックキャスト演算子がありますArrayListからキャストしています。Javaでジェネリックスを操作する

String i=ArrayListObject.get(position); 

は、しかし、コンパイラが来るか全くタイプが存在しない場合、一般的なArrayListのが唯一の<で宣言された型>を格納できることを知っています。クラスをコンパイルする際に、この情報はどこに格納されますか。 親切に更新

+2

タイプ消去と呼ばれています。 https://docs.oracle.com/javase/tutorial/java/generics/erasure.html。 Javaジェネリックは、C++ジェネリックのようには行われません.Cジェネリックでは、それぞれ固有のクラスが作成されます。 – duffymo

+0

@duffymo彼はタイプ消去について知っている。彼は、すべての型情報が消去されたときにコンパイラがその仕事をどのように行うことができるかを尋ねる。 – GhostCat

答えて

3

これは真実の半分です。

はい、ランタイムでは、そのタイプの情報は使用されません。ちょうど "オブジェクト"が動き回ります。これは、型消去のと呼ばれています。

しかし、いくつかの一般的なTを使ってfields、methods、...が定義された情報は、クラスファイルにコンパイルされています。コンパイラがそのクラスファイルを読むことができるように。たとえばArrayList<String>のインスタンスを作成することがわかります。言い換えれば

:あなたはここについて 2つの異なることを話している:A)それは 実行コードにその仕事とB)JVM読み込みクラスファイルを行うことができますので、クラスファイルを読み込み、コンパイラ。

あなたが本当に興味があるとき正確にその情報が保存されている場合、hereを参照してください!

+0

ありがとうございます。情報は本当に役立った。リンクは完全な詳細を持っていた。 – user2779311