我怎样才能获得Generic参数类

时间:2012-11-20 07:23:54

标签: java

  

可能重复:
  get type of a generic parameter in java with reflection
  How to get generic’s class

如何获得Generic参数类。

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

这是错的。为什么?如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

你不能。

T的类型仅在编译时才知道。

程序开始运行后,T的类型将为Object。

这是泛型在Java中的工作方式。

答案 1 :(得分: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.
}

BTW:动态获取它并非不可能,但这取决于它的使用方式。 e.g

public class Arnie extends LastActionHero<MuscleHero> { }

可以确定Arnie.class有一个带有Generic参数MuscleHero的超类。

public class Arnie<H extend Hero> extends LastActionHero<H> { }

在这种情况下,超类的泛型参数只是H.