重複の可能性:
リフレクションを使用してJavaでジェネリックパラメーターの型
を取得するジェネリックのクラスを取得する方法
ジェネリック パラメータのクラスを取得するにはどうすればよいですか。
public <T extends BeanProxiable> void method(){
Class claz = T.class
}
それは間違っています。なんで?この問題を解決するには?
重複の可能性:
リフレクションを使用してJavaでジェネリックパラメーターの型
を取得するジェネリックのクラスを取得する方法
ジェネリック パラメータのクラスを取得するにはどうすればよいですか。
public <T extends BeanProxiable> void method(){
Class claz = T.class
}
それは間違っています。なんで?この問題を解決するには?
できません。
T の型は、コンパイル時にのみ認識されます。
プログラムの実行が開始されると、T の型は Object になります。
これが、Java でのジェネリックのしくみです。
型を動的に指定できますが、コンパイラはこれを自動的に行いません。
public abstract class LastActionHero<H extends Hero>(){
protected final Class<H> hClass;
protected LastActionHero(Class<H> hClass) {
this.hClass = hClass;
}
// use hClass how you like.
}
ところで:これを動的に取得することは不可能ではありませんが、使用方法によって異なります。例えば
public class Arnie extends LastActionHero<MuscleHero> { }
Arnie.class には、MuscleHero の Generic パラメータを持つスーパー クラスがあると判断できます。
public class Arnie<H extend Hero> extends LastActionHero<H> { }
この場合、スーパー クラスのジェネリック パラメーターは単に H になります。