2

Cジェネリックスをサポートする(つまりC<X>型を定義する)特定のクラスがあるとします。私は次のようなことをしたいと思います:

Class<C<X>>クラスのインスタンスを取得したいのですが。これは次の式で得られると思います。

C<X>.class

しかし、コンパイラはその点について私に同意しません:P

ヒントはありますか?

4

2 に答える 2

7

あなたが得ることができる最も近いのは

@SuppressWarning("unchecked")
Class<C<X>> cxClass = (Class<C<X>>) (Class) C.class

ジェネリックはコンパイル時の機能であるため、ご覧のとおり、これは実際にはあまり機能しません。

于 2012-12-30T19:27:44.093 に答える
7

タイプ eraserのため、これは不可能です。型パラメータは実行時には利用できません - のすべてのインスタンスはC<Whatever>、実際には単に のインスタンスですC。したがって、 のようなクラス リテラルしか記述できませんC.class

ただし、次のように、具体的な型パラメーターを定義してジェネリック クラスをサブクラス化する場合:

class StringC extends C<String> {}

...実際には、Stringリフレクションを介して型パラメーター (つまり) の値を取得することが可能です。次のブログを参照してください。

于 2012-12-30T19:29:38.637 に答える