考虑这个做作类:如何从参数化类型的方法参数中获取参数化类型的类?
import java.util.List;
public class Test {
public String chooseRandom(List<String> strings) {
return null;
}
}
当使用反射来检查这个方法,我怎么能得到较java.lang.String
(甚至串"java.lang.String"
)的Class
对象的论据chooseRandom
看什么时候?
我知道Java在编译时会擦除类型,但它们必须仍然存在,因为javap
可以正确地打印它们。在运行这个编译的类结果javap
:
Compiled from "Test.java"
public class Test {
public Test();
public java.lang.String chooseRandom(java.util.List<java.lang.String>);
}
参数化类型java.util.List
(java.lang.String
)绝对可用...我只是不能找出它是什么。
我已经试过这样:
Class clazz = [grab the type of chooseRandom's parameter list's first argument];
String typeName = clazz.getName();
TypeVariable[] genericTypes = clazz.getTypeParameters();
if(null != genericTypes && 0 < genericTypes.length)
{
boolean first = true;
typeName += "<";
for(TypeVariable type : genericTypes)
{
if(first) first = false;
else typeName += ",";
typeName += type.getTypeName();
}
typeName = typeName + ">";
}
这给了我一个java.util.List<E>
typeName
。我所希望的是java.util.List<java.lang.String>
。
我读过SO其他一些问题和答案,其中没有一个似乎真的来回答这个问题,或者,如果他们这样做,有没有与之相关的工作代码和解释是...薄。
这让我的大脑在我需要它的地方。起初,我接受了这个答案,但我会发布我自己的答案,因为它确实更加充实。 – 2015-02-06 01:15:32