2010-12-30 8 views
1

リフレクションを使用してスーパークラスに渡される型パラメータ値を見つけるにはどうすればよいですか?リフレクションを使用した型パラメータへのアクセス

たとえば、Bar.classと指定すると、Integer.classFooの型パラメータTがどのように渡されるのですか?

public class Foo<T> { 
} 

public class Bar extends Foo<Integer> { 
} 

ありがとう!

答えて

1

バーは、特定のFooを拡張するクラスであるので、あなたはこの作品だけ

ParameterizedType type = (ParameterizedType) Bar.class.getGenericSuperclass(); 
System.out.println(type.getRawType()); // prints; class Foo 
Type[] actualTypeArguments = type.getActualTypeArguments(); 
System.out.println(actualTypeArguments[0]); // prints; class java.lang.Integer 

を試すことができます。以下のような変数を宣言した場合、実行時にintFooのパラメータ型を決定することはできません。上記の

Foo<Integer> intFoo = new Foo<Integer>(); 
2
public class Bar extends Foo<Integer> { 

public Class getTypeClass { 
    ParameterizedType parameterizedType = 
    (ParameterizedType) getClass().getGenericSuperClass(); 
    return (Class) parameterizedtype.getActualTypeArguments()[0]; 
} 

} 

は実用的な状況、のほとんどで動作しますがを保証しない、なぜなら型消去のため、直接これを実行する方法はありません必要があります。

+0

この場合、getTypeClass()にはクラスまたはInteger.classを返すことができます。 ;) –

+0

@Peterはい。私はちょうど一般的な方法でプロセスを表示しようとしました:) –

関連する問題