首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在带有反射的Java中获取泛型参数的类型

在带有反射的Java中获取泛型参数的类型
EN

Stack Overflow用户
提问于 2009-12-14 22:15:18
回答 13查看 206.1K关注 0票数 157

可以获得泛型参数的类型吗?

举个例子:

代码语言:javascript
复制
public final class Voodoo {
    public static void chill(List<?> aListWithTypeSpiderMan) {
        // Here I'd like to get the Class-Object 'SpiderMan'
        Class typeOfTheList = ???;
    }

    public static void main(String... args) {
        chill(new ArrayList<SpiderMan>());
    }
}
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-12-14 22:37:16

我曾经偶然发现的一个结构看起来像

代码语言:javascript
复制
Class<T> persistentClass = (Class<T>)
   ((ParameterizedType)getClass().getGenericSuperclass())
      .getActualTypeArguments()[0];

所以似乎有一些反射魔法,不幸的是我不能完全理解…抱歉的。

票数 165
EN

Stack Overflow用户

发布于 2011-03-14 23:58:05

实际上,我让它起作用了。考虑以下代码片段:

代码语言:javascript
复制
Method m;
Type[] genericParameterTypes = m.getGenericParameterTypes();
for (int i = 0; i < genericParameterTypes.length; i++) {
     if( genericParameterTypes[i] instanceof ParameterizedType ) {
                Type[] parameters = ((ParameterizedType)genericParameterTypes[i]).getActualTypeArguments();
//parameters[0] contains java.lang.String for method like "method(List<String> value)"

     }
 }

我使用的是jdk 1.6

票数 21
EN

Stack Overflow用户

发布于 2009-12-14 22:21:43

不,那不可能。由于向下兼容的问题,Java的泛型是基于type erasure的。在运行时,您所拥有的只是一个非通用的List对象。在运行时有一些关于类型参数的信息,但它驻留在类定义中(例如,你可以问"what generic type does this field's definition use?,而不是在对象实例中。

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

https://stackoverflow.com/questions/1901164

复制
相关文章

相似问题

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