今天碰到一个问题,类似于如下:
子类继承父类,并且规定了父类的泛型,在外面通过多态的形式,new出子类,如何获取规定的泛型呢
找了半天之后,找到了合适的解决方案:
public class MyTest {
public static void main(String[] args) {
BaseClass b = new MyTest01();
Object o1 = null;
Object o2 = null;
Class<? extends BaseClass> aClass = b.getClass();
Method[] methods = aClass.getMethods();
Type genericSuperclass = aClass.getGenericSuperclass();
Type[] genericInterfaces = aClass.getGenericInterfaces();
System.out.println(Arrays.toString(genericInterfaces));
String typeName = genericSuperclass.getTypeName();
Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass).getActualTypeArguments();
o1 = JSONObject.parseObject("{name:\"lisi\",des:\"haha\"}",actualTypeArguments[0]);
o2 = JSONObject.parseObject("{name:\"lisi\",des:\"haha\"}",actualTypeArguments[1]);
b.test(o1,o2);
}
}
关键步骤就是如下:
// 获取class类
Class<? extends BaseClass> aClass = b.getClass();
// 获取带泛型父类
Type genericSuperclass = aClass.getGenericSuperclass();
// 将父类强转为泛型父类,并且获取实际泛型数组
Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass).getActualTypeArguments();
//获取到的数组中,元素可以强转为class
Class actualTypeArgument =(Class) actualTypeArguments[0];