繼承中的this的含義及通過反射獲取泛型參數

在繼承中,如果A類繼承了B類,super對應B類,this對應A類。

package cn.test;

import java.lang.reflect.ParameterizedType;

public class Animal<T> {
	Class<T> clazz=null;
	
	public Animal() {
		//這裏的this.getClass()實際上得到的是子類中的new的類對象,因爲是在子類的構造器中調用的父類構造方法,所以父類構造器中的this指的是當前new的子類對象
		System.out.println(this.getClass().getName());
		ParameterizedType ptType=(ParameterizedType)this.getClass().getGenericSuperclass();	//獲取當前new的對象的帶有泛型的父類
		System.out.println(ptType);
		this.clazz=(Class<T>)ptType.getActualTypeArguments()[0];	//獲取第一個泛型參數的真實類型(泛型可能有多個)
		System.out.println("clazz--"+clazz);
	}
}
下面是子類信息:

public class Dog extends Animal<Dog>{

	public Dog() {
		super();
	}
	
	public static void main(String[] args) {
		Dog dog=new Dog();
		
	}
}

執行子類中的main方法,打印結果如下:

cn.itcast.oa.base.Dog
cn.itcast.oa.base.Animal<cn.itcast.oa.base.Dog>
clazz--class cn.itcast.oa.base.Dog


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章