java.lang.Class および java.lang.Reflect の拡張
リフレクション
5.0 での拡張
java.lang.Class および java.lang.reflect に加えられた変更は次のとおりです。
汎用型のサポート
- 汎用型の情報で、構造化プログラムのリフレクションをサポートしました。つまり、型、メソッド、コンストラクタ、またはフィールドの宣言を検査し、汎用型の情報を取得することが可能になりました。特に、型、メソッド、またはコンストラクタが任意の型の変数を宣言しているかどうかを判断し、その型の変数をアプリケーションプログラムに反映させることができます。これにより、たとえば変数の名前や境界を調べることが可能です。また、フィールド、メソッドやコンストラクタのパラメータの型、メソッドの戻り値の型、またはメソッドやコンストラクタの throws 節で、その型の非消去形式を取得することもできます。型名の汎用化形式は、toGenericString() を介して利用できます。ただし、インスタンスが属する汎用呼び出しを判断することはサポートされていないので注意してください。
注釈のサポート
- 型、メソッド、フィールド、コンストラクタ、および実行時に利用可能とマーク済みのメソッドやコンストラクタの仮パラメータで、getAnnotation() メソッドを使用して注釈を取得することができます。また、インタフェースが注釈型かどうかを調べることもできます。
列挙型のサポート
- クラスが列挙型であるかどうか、またフィールドが列挙型定数を表しているかどうかを判断できます。
変数引数のサポート
- メソッドやコンストラクタが可変引数に対応しているかどうかを調べることができます。
簡易メソッド
- クラスがローカル、匿名、またはメンバクラスであるかどうか、および型の単純名と正規名を確認します。また、メンバが合成 (実装で作成したもの) かどうかを調べることができます。
クラス java.lang.Class の汎用化
- java.lang.Class のインスタンスを型トークンとして使用できます。 例については、
「generics tutorial」
の 8 節を参照してください。
1.4.0 での拡張
パフォーマンスの拡張
- J2SDK 1.4.0 以降では、一部のリフレクト処理、特に
java.lang.reflect.Field
、
java.lang.reflect.Method.invoke()
、
java.lang.reflect.Constructor.newInstance()
、および
Class.newInstance()
が書き直されて、パフォーマンスが向上しました。リフレクトによる呼び出しやインスタンス化は、以前のリリースに比べ数倍速くなりました。