可以获得泛型参数的类型吗?
举个例子:
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>());
}
}
发布于 2009-12-14 22:37:16
我曾经偶然发现的一个结构看起来像
Class<T> persistentClass = (Class<T>)
((ParameterizedType)getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
所以似乎有一些反射魔法,不幸的是我不能完全理解…抱歉的。
发布于 2011-03-14 23:58:05
实际上,我让它起作用了。考虑以下代码片段:
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
发布于 2009-12-14 22:21:43
不,那不可能。由于向下兼容的问题,Java的泛型是基于type erasure的。在运行时,您所拥有的只是一个非通用的List
对象。在运行时有一些关于类型参数的信息,但它驻留在类定义中(例如,你可以问"what generic type does this field's definition use?,而不是在对象实例中。
https://stackoverflow.com/questions/1901164
复制相似问题