关闭

Java中的getGenericSuperclass方法的基本用法

标签: typegetGenericSuperclassParameterizedType
9316人阅读 评论(3) 收藏 举报
分类:

通过getGenericSuperclass方法可以获取当前对象的直接超类的 Type

实例:

package cn.tzz.lang.clazz;

public class User {

	private Integer id;
	private String name;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

public class BaseHibernateDao<T,ID extends Serializable> {
	
	private Class<T> clazz;
	
	public BaseHibernateDao(){
		//当前对象的直接超类的 Type
		Type genericSuperclass = getClass().getGenericSuperclass();
		if(genericSuperclass instanceof ParameterizedType){
			//参数化类型
			ParameterizedType parameterizedType= (ParameterizedType) genericSuperclass;
			//返回表示此类型实际类型参数的 Type 对象的数组
			Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
			this.clazz= (Class<T>)actualTypeArguments[0];
		}else{
			this.clazz= (Class<T>)genericSuperclass;
		}
	}

	public Class<T> getClazz() {
		return clazz;
	}
}
public class UserService extends BaseHibernateDao<User, Integer>{

}


测试实例:

public class TestUserService {
	public static void main(String[] args) {
		UserService userService = new UserService();
		System.out.println(userService.getClass());
	}
}

运行结果:

class cn.tzz.lang.clazz.User

4
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:150082次
    • 积分:1366
    • 等级:
    • 排名:千里之外
    • 原创:35篇
    • 转载:2篇
    • 译文:0篇
    • 评论:12条
    文章分类
    最新评论