1
class Super<T> {}

class Child<A, B> extends Super<B> {}

class Code {
  public void method(Child<String, Integer> child) {}
}

リフレクションを使用してパラメーターの型を取得できます。

ParameterizedType ptype = (ParameterizedType) Code.class.getMethod("method").getGenericParameterTypes()[0]

しかし、どうすれば ptype の汎用スーパークラスを取得できますか (つまり、 だけSuper.classでなく、型パラメーターもInteger)

私の使用例は、リフレクションを使用して、メソッドの引数の 1 つが MyClass オブジェクトのコレクションであるかどうかを判断することです (確認する実際の引数インスタンスがありません)。

4

3 に答える 3

1

コンパイル中に Java で型パラメーターが消去されます。あちらこちらを見ください。したがって、おそらくこれを行うことはできません。

于 2012-10-22T09:55:44.210 に答える
0

私が理解している限り、あなたはそれをすることはできません。

Childを使用して(StringおよびInteger)の型パラメータを抽出できますが、でそれらを相関さgetActualTypeArguments()せることはできません。TSuper<T>

Tまた、から抽出することもできますがclass Child extends Super<Integer>、そうではありません。

つまりCollection<MyClass>、引数で検索したい場合は、持っている場合にのみそれを実行できますがmethod(Collection<MyClass>)method(ArrayList<MyClass>)他の何かは実行できません。

于 2012-10-22T10:06:53.233 に答える