Javaタイプ消去 7836 ワード Javaの基礎 消去タイプJavaはコンパイル後のバイトコード(.class)ファイルには汎用中のタイプ情報が含まれていません.汎用を使用するときに付けられたタイプパラメータは、コンパイラがコンパイル時に削除されます.このプロセスをタイプ消去と呼びます.コードに定義されているList Listなどのタイプはコンパイル もリストとなり、JVMが ているのはリストのみであり、 に されたタイプ はJVMには えない.したがって、JVMにとってList Listは じクラスであるため、 は にはJava の であり、 とも ばれる.タイプ によるプロパティ1. クラスには のクラスオブジェクトはありません. えば、List.classまたはList.classは せず、List.classのみであり、 えば、 のコード はtrueである.public static void main(String[] args) { List<String> a = new ArrayList<String>(); List<Integer> b = new ArrayList<Integer>(); System.out.println(a.getClass() == b.getClass()); } 2. は、 クラスのすべてのインスタンスによって されます.MyClassとして されたクラスについて、 にアクセスする は としてMyClass.StaticVarである.new MyClassによって されたオブジェクトも、new MyClassによって されたオブジェクトも、 を します.3. タイプパラメータはJava のcatch では できません. はJVMの に われるためである.タイプ が されるため、JVMは2つの タイプMyExceptionとMyExceptionを することができない.JVMの は、MyExceptionタイプであり、 に するcatch を することはできません.タイプ の タイプ の も です.まず、タイプパラメータを き えるための のクラスを つけます.この なクラスは にObjectである.タイプパラメータの が されている は、この が されます.コードのタイプパラメータを のクラスに き えます. に されるタイプ を します.すなわち、<>の を します. えば、T get()メソッド はObject get()Listになり、Listになります. に、ブリッジメソッドを する がある があります.(bridge method).これは、タイプを した のクラスに な が けている があるためである. えば、 のコードを すると、タイプ が された 、 のクラスの はClass MyString implements Comparableになった.しかし、これにより、インタフェースMyStringで されたComparableの が されないため、クラスint compareTo(Object)にコンパイルエラーが する.この 、コンパイルによってこのメソッドを に します.class MyString implements Comparable<String> { public int compareTo(String str) { return 0; } } インスタンス タイプ メカニズムを すると、コンパイラはすべてのタイプチェックを していることがわかります.コンパイラが な を するのは、タイプのセキュリティを するためです. のList Listを に に します.public void inspect(List<Object> list) { for (Object obj : list) { System.out.println(obj); } list.add(1); } public void test() { List<String> strs = new ArrayList<String>(); inspect(strs); // } このコードでは、inspect()メソッド List , test()メソッドでListに しようとすると、コンパイルエラーが します.このようなアプローチが されると すると、inspect()メソッドでは、list.add(1)によってセットに を することができる.このように、test()メソッドでは、Listと された にIntegerタイプのオブジェクトが されている.これは らかにタイプ の に しており、ある ClassCastExceptionを げ すに いない.したがって、コンパイラはこのような を します.コンパイラは、 な りタイプのセキュリティの をチェックします. する に していると した 、コンパイルエラーが します.コンパイラがタイプの が しいかどうかを できない 、 メッセージが されます. nが与えられ、記憶値1が生成される...nのすべての構造に固有のBST(二叉探索ツリー). CoffeeScriptハマリどころ撰集