2

重複の可能性:
リフレクションを使用してJavaでジェネリックパラメーターの型
を取得するジェネリックのクラスを取得する方法

ジェネリック パラメータのクラスを取得するにはどうすればよいですか。

 public <T extends BeanProxiable> void method(){
    Class claz = T.class
 }

それは間違っています。なんで?この問題を解決するには?

4

2 に答える 2

2

できません。

T の型は、コンパイル時にのみ認識されます。

プログラムの実行が開始されると、T の型は Object になります。

これが、Java でのジェネリックのしくみです。

于 2012-11-20T07:28:21.717 に答える
1

型を動的に指定できますが、コンパイラはこれを自動的に行いません。

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 になります。

于 2012-11-20T07:28:19.713 に答える