2

私は持っている:

interface I<T> {}

と:

interface I1 extends I<Clazz1> {}

I<Clazz2>、I<Clazz3> などを拡張する I2、I3 などもあります。

実行時のClazz1については知りません。どうすればこの情報を入手できますか?

私は試した:

subInterface1.getInterfaces()[0].getTypeParameters()[0]

しかし、Clazz1 についてではなく、T についてのみ知っています。

4

2 に答える 2

2

あなたがするとき

subInterface1.getInterfaces()[0].getTypeParameters()[0]

Classインターフェイスを表すオブジェクトの最初の正式な型パラメーターを取得しています。Iこれは実際には変数ですT。代わりに使用する必要があります

subInterface1.getGenericInterfaces()[0]

によって拡張された の特定のインスタンス化Type表すオブジェクトを取得します。これは のインスタンスになるため、それにキャストして、 と を使用して生の型と実際の型パラメータ値をそれぞれ抽出できます。の戻り値の型は、実際の引数が具体的なクラスではない可能性があるためではなく、変数またはワイルドカード (または実際には のような場合は他のパラメーター化された型) である可能性があることに注意してください。II1ParameterizedTypegetRawType()getActualTypeArguments()IClazz1getActualTypeArguments()Type[]Class[]List<List<String>>

于 2012-11-13T11:16:54.517 に答える
1

私は解決策を見つけました:

((ParameterizedType)subInterface1.getGenericInterfaces()[0]).getActualTypeArguments()[0]
于 2012-11-13T11:19:12.803 に答える