Java中getGenericSuperclass()方法詳解

JacobGo發表於2017-05-18

先看以下程式碼:

定義一個帶泛型的父類

package go.jacob.day518;

public class Person <T>{

}
讓Student繼承Person類

public class Student extends Person<Student> {
}

測試類

public class App {
	public static void main(String[] args) {
		Student stu = new Student();
		Class clazz = stu.getClass();
		System.out.println("Student類:" + clazz);

		System.out.println("Student父類:" + clazz.getSuperclass());
		// getGenericSuperclass()獲得帶有泛型的父類
		// Type是 Java 程式語言中所有型別的公共高階介面。它們包括原始型別、引數化型別、陣列型別、型別變數和基本型別。
		System.out.println("Student的Generic父類:" + clazz.getGenericSuperclass());
		
		Type type=clazz.getGenericSuperclass();
		//ParameterizedType引數化型別,即泛型  
		ParameterizedType p=(ParameterizedType)type;  
		Class c=(Class)p.getActualTypeArguments()[0];
		System.out.println(c);
	}
}

執行結果:

Student類:class go.jacob.day518.Student
Student父類:class go.jacob.day518.Person
Student的Generic父類:go.jacob.day518.Person<go.jacob.day518.Student>
class go.jacob.day518.Student




簡單來說,clazz.getGenericSuperclass()可以獲得帶泛型的父類,這種型別在java中叫做Type



然後用ParameterizedType p=(ParameterizedType)type;  與Class c=(Class)p.getActualTypeArguments()[0];獲得泛型的具體型別









相關文章