getGenericSuperclass方法简解
定义一个含泛型父类Father<T>
package com.mark.test;
public class Father<T> {
}
定义一个继承了含泛型父类的子类Son
public class Son extends Father<Son> {
}
测试各种方法打印效果
public class ClassTest {
@Test
public void test(){
Son son = new Son();
Class clazz = son.getClass();
System.out.println("---Son extends Father<Son>---");
System.out.println("自己类:" + clazz);
System.out.println("父类:" + clazz.getSuperclass());
System.out.println("带有泛型的父类:" + clazz.getGenericSuperclass());
//ParameterizedType参数化类型,即泛型
ParameterizedType pt = (ParameterizedType) clazz.getGenericSuperclass();
Type type = pt.getActualTypeArguments()[0];
System.out.println("强转类型后获得<T>类型:" + type);
}
}
---Son extends Father<Son>---
自己类 :class com.mark.test.Son
父类 :class com.mark.test.Father
带有泛型的父类 :com.mark.test.Father<com.mark.test.Son>
强转类型后获得<T>类型 :class com.mark.test.Son
getClass(自身类)
getSuperclass(父类)
getGenericSuperclass(带有泛型的父类,原返回值类型为Type,需要强转类型)
//ParameterizedType参数化类型,即泛型
ParameterizedType pt = (ParameterizedType) clazz.getGenericSuperclass();
getActualTypeArguments(泛型类)
Type type = pt.getActualTypeArguments()[0];
---------------------
原文:https://blog.csdn.net/mmake1994/article/details/81947195