java reflection
泛型
java 泛型存在类型擦除(参见 java 泛型)
1
2
3
4
List l1 = new ArrayList();
List l2 = new ArrayList();
System.out.println(l1.getClass() == l2.getClass()); // return true, 两个都是 List.class
获取运行时泛型类型
类型擦除使得根据类定义获取 runtime 泛型类型是不可能的,一般有几种方法(参见 stackoverflow):
1. 根据类对象实例获取,可参见 handle java generic types with reflection * eg. Class tClass = (Class) ReflectionUtil.getClass(ReflectionUtil.getParameterizedTypes(this)[0]);
2. 从父类中获取(要求父类有相同的泛型参数) * eg. Class tClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments