C
ジェネリックスをサポートする(つまりC<X>
型を定義する)特定のクラスがあるとします。私は次のようなことをしたいと思います:
Class<C<X>>
クラスのインスタンスを取得したいのですが。これは次の式で得られると思います。
C<X>.class
しかし、コンパイラはその点について私に同意しません:P
ヒントはありますか?
あなたが得ることができる最も近いのは
@SuppressWarning("unchecked")
Class<C<X>> cxClass = (Class<C<X>>) (Class) C.class
ジェネリックはコンパイル時の機能であるため、ご覧のとおり、これは実際にはあまり機能しません。
タイプ eraserのため、これは不可能です。型パラメータは実行時には利用できません - のすべてのインスタンスはC<Whatever>
、実際には単に のインスタンスですC
。したがって、 のようなクラス リテラルしか記述できませんC.class
。
ただし、次のように、具体的な型パラメーターを定義してジェネリック クラスをサブクラス化する場合:
class StringC extends C<String> {}
...実際には、String
リフレクションを介して型パラメーター (つまり) の値を取得することが可能です。次のブログを参照してください。