java 基础之ParameterizedType

先用例子来解释如下这两行代码:

	ParameterizedType pt=(ParameterizedType) this.getClass().getGenericSuperclass();
	Class clzz=   (Class) pt.getActualTypeArguments()[0];

新建一个Dao接口

public interface Dao<T> {
	
	public void save(T entity);
}

建一个实现类:

public class DaoImpl<T> implements Dao<T> {

	public DaoImpl() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void save(T entity) {
	ParameterizedType pt=(ParameterizedType) this.getClass().getGenericSuperclass();
	Class clzz=   (Class) pt.getActualTypeArguments()[0];
	System.out.println("Class:"+clzz);
	}

	
}
在建一个类继承这个泛型实现类
<pre name="code" class="java">public class StudentDao extends DaoImpl<Student> {
	public static void main(String[] args) {
	
		DaoImpl dao=new StudentDao();
		System.out.println(dao.getClass());
		dao.save(null);
		
	}

}
此时系统在调用DaoImpl.save()方法时。里面的this.getClass()是class com.john.generic.StudentDao 所以
ParameterizedType pt=(ParameterizedType) this.getClass().getGenericSuperclass();
这句话的意思就是调用
StudentDao父类(即DaoImpl)参数类型。
Class clzz=   (Class) pt.getActualTypeArguments()[0];
就是调用里面的第一个参数
DaoImpl<T>  中的<T>  若是想查看DaoImpl<T,O>中的第二个泛型O则用
Class clzz=   (Class) pt.getActualTypeArguments()[1];
 
 


 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值