首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混凝土类的GenericType

混凝土类的GenericType
EN

Stack Overflow用户
提问于 2011-05-27 12:52:13
回答 3查看 907关注 0票数 0

如何从我的具体类中获取泛型类型。例如,我有:

代码语言:javascript
复制
class MyClass<String>
{
 public Type getGenericType
 {
      // how can I return String.class in here?
 }
}

我可以用下面这样的抽象类做到这一点:

代码语言:javascript
复制
abstract class MyClass<String>
{    
   public Type getGenericType
   {
     Type t = this.getClass().getGenericSuperclass();
     return ((ParameterizedType)t).getActualTypeArguments()[0];
   }
}

如何像抽象类一样对具体类进行类似的操作。如果我做不到,你能解释一下为什么吗?

谢谢,

EN

回答 3

Stack Overflow用户

发布于 2011-05-27 13:05:35

您不能这样做,因为一旦编译了代码,泛型甚至不再存在

你的String实际上就变成了Object

当您的代码试图在编译后运行时,这显然会造成问题……

票数 2
EN

Stack Overflow用户

发布于 2011-05-27 13:12:20

尝试如下所示:

代码语言:javascript
复制
public class MyClass<T> {

    private final Class<T> type;

    @SuppressWarnings("unchecked")
    public MyClass() {
       type = (Class<T>) this.getClass();
    }

    public Class<T> getGenericType() {
     return type;
    }

}
票数 0
EN

Stack Overflow用户

发布于 2011-05-27 13:50:12

在这个阶段,Java不支持泛型的reification。但是,可以在运行时获取字段和方法的参数类型信息。This article对这个问题有很好的洞察力。对于类,显式地将参数类型传递到构造函数中通常比较方便:

代码语言:javascript
复制
class ClassWithParameter<T> {
 private final Class<T> parameterType;

 public ClassWithParameter(final Class<T> parameterType) {
      this.parameterType = parameterType;
 }
 ... }

或者,可以创建一个带有Class属性的自定义运行时注释,并使用它来注释类,这些类在运行时需要参数类型信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6147962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档