2014年6月26日木曜日

Javaでジェネリックなインターフェースを作って実装で型パラメータを固定した場合にそれを取得する方法

こんなコードで取得できる。
public class Foo {
static interface Bar<K extends Enum<K>>{
}
enum Para{
HOGE,
FUGA,
}
static class FooBar implements Bar<Para>{
}
public static void main(String[] a){
Class<?> c = FooBar.class;
System.out.println(c);
for(Object o : c.getGenericInterfaces()){
ParameterizedType t = ParameterizedType.class.cast(o);
for(Type t2 : t.getActualTypeArguments())
System.out.println(t2);
}
}
}


実行結果

class Foo$FooBar
class Foo$Para 


あんまりやらないだろうけど。