在运行时获取通用类的类

我怎样才能做到这一点?

public class GenericClass<T>
{
    public Type getMyType()
    {
        //How do I return the type of T?
    }
}

到目前为止我尝试过的所有东西总是返回Object类型而不是使用的特定类型。


正如其他人所提到的,只有在某些情况下才可以反思。

如果您真的需要这种类型,这是通常的(类型安全的)解决方法模式:

public class GenericClass<T> {

     private final Class<T> type;

     public GenericClass(Class<T> type) {
          this.type = type;
     }

     public Class<T> getMyType() {
         return this.type;
     }
}

我看到过这样的事情

private Class<T> persistentClass;

public Constructor() {
    this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
                            .getGenericSuperclass()).getActualTypeArguments()[0];
 }

在休眠GenericDataAccessObjects示例中


泛型在运行时没有实现。 这意味着信息在运行时不存在。

在保持向后兼容性的同时向Java添加泛型是一个参考化的过程(你可以看到关于它的开创性论文:使未来变得安全:为Java编程语言增加了通用性)。

关于这个问题有很多文献,有些人对目前的状态不满,有些人说实际上这是一种诱惑,并没有真正的需要。 你可以阅读这两个链接,我发现它们很有趣。

链接地址: http://www.djcxy.com/p/57841.html

上一篇: Get generic type of class at runtime

下一篇: Specialize implementation of GenericType<A,B> for case A == B?