37_汎用型の内部原理とより深い応用
1063 ワード
汎用型はコンパイラに見せるだけです
汎用型はjavacコンパイラに提供され、セット内の入力タイプを限定し、コンパイラがソースプログラムの不正な入力をブロックするようにすることができ、コンパイラがタイプの説明をもたらすセットをコンパイルすると「タイプ」情報が除去され、プログラムの実行効率に影響を与えず、パラメトリック化された汎用型に対してgetClass()メソッドの戻り値は元のタイプと全く同じである.コンパイルにより生成されたバイトコードは汎用型のタイプ情報を除去するので,コンパイラをスキップできれば,ある汎用型の集合に他のタイプのデータを加えることができ,例えば反射で集合を得,そのaddメソッドを呼び出すことができる.
多く言わないで、コードをつけます!
汎用型はjavacコンパイラに提供され、セット内の入力タイプを限定し、コンパイラがソースプログラムの不正な入力をブロックするようにすることができ、コンパイラがタイプの説明をもたらすセットをコンパイルすると「タイプ」情報が除去され、プログラムの実行効率に影響を与えず、パラメトリック化された汎用型に対してgetClass()メソッドの戻り値は元のタイプと全く同じである.コンパイルにより生成されたバイトコードは汎用型のタイプ情報を除去するので,コンパイラをスキップできれば,ある汎用型の集合に他のタイプのデータを加えることができ,例えば反射で集合を得,そのaddメソッドを呼び出すことができる.
多く言わないで、コードをつけます!
/***** , *****/
List<Integer> list0=new ArrayList<Integer>();
list0.getClass().getMethod("add", Object.class).invoke(list0, "ljl");// Integer String "ljl"
System.out.println(list0.get(0));//ljl get Integer, String