【问题标题】:How can i get class of Generic parameter [duplicate]我如何获得通用参数类[重复]
【发布时间】:2012-11-20 07:23:54
【问题描述】:

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

我怎样才能得到通用参数的类。

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

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

【问题讨论】:

标签: java


【解决方案1】:

你不能。

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

一旦程序开始运行,T的类型将是Object。

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

【讨论】:

    【解决方案2】:

    您可以动态提供类型,但编译器不会自动为您执行此操作。

    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 有一个超类,其 Generic 参数为 MuscleHero。

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

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

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 1970-01-01
      • 2012-07-10
      • 2017-03-21
      • 2021-03-28
      • 1970-01-01
      • 2016-06-20
      • 2022-01-16
      • 2012-09-16
      相关资源
      最近更新 更多