参数化类型 即泛型 与反射 相关的方法

时间:2022-08-12 19:25:44

Person.java

package test;

public class Person<T> {

}

Student.java

package test;

public class Student extends Person<Student> {

}

testmain.java

package test;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class testmain {

public static void main(String[] args) {
Student student = new Student();
Class oriclass = student.getClass();
/**
* getSuperclass() 获取该类的父类
*/
System.out.println(oriclass.getSuperclass());

/**
* getGenericSuperclass() 获取带有泛型的父类
* Type 是 java 编译语言中所有类型的公共高级接口,它们包括 原始类型,参数化类型,数组类型,类型变量和基本类型
*/
Type type = oriclass.getGenericSuperclass();
System.out.println(type);

/**
* ParameterizedType参数化类型,即泛型  
*/
ParameterizedType p = (ParameterizedType)type;
/**
* getActualTypeArguments获取参数化类型的数组,泛型可能有多个 
*/
Class c = (Class)p.getActualTypeArguments()[0];
System.out.println(c);

}
}