通过反射技术,获取泛型类的真实类型

1 篇文章 0 订阅
1 篇文章 0 订阅

如果在父类中想要获取泛型T的类型 

T.class; 

T.getClass(); 

这两种方法都是无法实现的,因为泛型T不是一个真正的类或者实例

下面的代码将介绍如何通过反射获得泛型T的真实的类的类型

 

import java.lang.reflect.ParameterizedType;

@SuppressWarnings("unchecked")
public class Base<T> {
	/**
	 * 如果在父类中想要获取泛型T的类型 
	 * T.class; 
	 * T.getClass(); 
	 * 这两种方法都是无法实现的,因为泛型T不是一个真正的类或者实例
	 */

	private Class<T> clazz;

	// 通过反射技术,获取泛型类的真实类型
	public Base() {

		ParameterizedType pt = (ParameterizedType) this.getClass()
				.getGenericSuperclass();// 这里面的this代表的是子类的实例
		this.clazz = (Class<T>) pt.getActualTypeArguments()[0];// 获取第一个类型参数的真实类型
		System.out.println("---> clazz : " + this.clazz);
	}

}

 

public class User extends Base<User> {

}

 

public class Role extends Base<Role> {

}

 

import org.junit.Test;

public class TestGeneric {
	@Test
	public void test(){
		User user = new User();
		Role role = new Role();
	}
}

 输出:

---> clazz : class User

---> clazz : class Role

打印除了真的泛型的类的类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值