1. 程式人生 > >Java如何獲得泛型類的真實型別

Java如何獲得泛型類的真實型別

public class RealType<T>{
	
	private Class<T> clazz;
	
	// 使用反射技術得到T的真實型別
	public Class getRealType(){
		// 獲取當前new的物件的泛型的父類型別
		ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
		// 獲取第一個型別引數的真實型別
		this.clazz = (Class<T>) pt.getActualTypeArguments()[0];
		return clazz;
	}
	
}

用法簡單舉例

public class BaseDao<T>{

    private Class<T> clazz;

    // 使用反射技術得到T的真實型別
    public Class getRealType(){
        // 獲取當前new的物件的泛型的父類型別
        ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
        // 獲取第一個型別引數的真實型別
        this.clazz = (Class<T>) pt.getActualTypeArguments()[0];
        return clazz;
    }

}

class ClassB extends BaseDao<String>{

    public static void main(String[] args) {
        ClassB classB = new ClassB();
        Class realType = classB.getRealType();
        System.out.println(realType.getName());
    }
}