SewiGの日記
2005-04-08 [金]
■ [Programming] Erasure
J2SE 5.0からGenericsが導入され型のキャストをコンパイル時にやらせて、しかも書き方がC++っぽくてC++のテンプレートと同じことができると思っていたらそうでもありませんでした。
C++と同様の機能を実現するためにVMの仕様を変更してしまっては、1.4までのクラスが使用できなくなるのでJavaではErasureを使用しています。Erasureではパラメータ情報からObjectとキャストの処理をコンパイラが行います。また、Erasure使用によって、以下の制限があります。
- 型変数Eに対して、基本データ型を指定することはできない
- 型変数Eのオブジェクトを、直接生成することはできない
- 型変数Eの配列を生成することはできない
- メソッドの戻り値として型変数Eの配列を返すようにしても、Objectの配列となる
- 型変数は、staticメンバとstatic初期化子には適用できない
- イレイジャの結果、メソッドのシグニチャが同じになるメソッドは定義できない
(JAVA PRESS Vol37)
● Magda [Great arcltie, thank you again for writing.]