ArrayList extends AbstractList,如果用反射getGenericSuperClass()......获取到的
是E,只有自定义一个继承自ArrayList的类才能得到String。
自答:
getName(List<String> lists)
,使用反射可以很容易得到String类型,但如果把方法改为getName(List <T>
lists),无论你使用什么方法都不可能得到运行时给出的T的类型,只能得到字符串“T”。有人说有个什么框架(忘了)采用了这样一个方法:定义一个内部类,把T传给该类的成员变量,然后使用匿名内部类得到该成员变量,我试了,绕了一大圈,最后得到的还是“T”,要想得到运行时传递的泛型参数类型,就必须在方法中明确声明泛型类型。<T>
lists),这样调用方法时给出clazz即可,而clazz就是T的Class。如果你想说这代码不够优雅,那我也没办法了。