public abstract class BaseDAO<T> {

	// 定义一个变量来接收泛型的类型
	private Class<T> clazz = null;

//	public BaseDAO(){
//
//	}

	// 获取T的Class对象,获取泛型的类型,泛型是在被子类继承时才确定
	{
		//获取当前BaseDAO的子类继承的父类中的泛型
		// getClass()获取子类的类型
		// getGenericSuperclass()用来获取当前类的父类的类型
		// ParameterizedType表示的是带泛型的类型
		Type genericSuperclass = this.getClass().getGenericSuperclass();
		ParameterizedType paramType = (ParameterizedType) genericSuperclass;

		Type[] typeArguments = paramType.getActualTypeArguments();//获取了父类的泛型参数
		clazz = (Class<T>) typeArguments[0];//泛型的第一个参数

	}
}

this关键字是指子类的实例

12-07 03:39