ParameterizedType获取java泛型参数类型
ParameterizedType
- getClass().getGenericSuperclass() 
 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type,然后将其转换ParameterizedType。
- getActualTypeArguments() 
 返回表示此类型实际类型参数的 Type 对象的数组。[0]就是这个数组中第一个了。简而言之就是获得超类的泛型参数的实际类型。
Base Service
public abstract class BaseService<T> implements ServiceInterface<T> {
    private Class<T> clazz;
    /**
     * 实体管理器引用
     *
     * @return EntityManager
     */
    protected abstract EntityManager getEntityManager();
    /**
     * DAO接口引用
     *
     * @return DAOInterface<T>
     */
    protected abstract DAOInterface<T> getDAOInterface();
    /**
     * 构造函数反射泛型对象真实类型
     */
    @SuppressWarnings("unchecked")
    public BaseService() {
        // 获取当前new的对象的泛型父类
        ParameterizedType pType = (ParameterizedType) this.getClass().getGenericSuperclass();
        // 获取类型参数的真是值,就是泛型参数的个数;
        this.clazz = (Class<T>) pType.getActualTypeArguments()[0];
    }
    @Override
    public T find(String id) throws Exception {
        return getEntityManager().find(clazz, id);
    }
    @Override
    public T save(T t) throws Exception {
        T save = getDAOInterface().save(t);
        return save;
    }
    @Override
    public void update(T t) throws Exception {
        getEntityManager().merge(t);
    }
    @Override
    public void del(String id) throws Exception {
        T t = getEntityManager().find(clazz, id);
        if (t != null) {
            getEntityManager().remove(t);
        }
    }
    @Override
    public List<T> findAll() throws Exception {
        return getDAOInterface().findAll();
    }
}
ParameterizedType获取java泛型参数类型的更多相关文章
- 利用ParameterizedType获取泛型参数类型
		//利用ParameterizedType获取java泛型的参数类型 public class Demo { public static void main(String[] args) { ... 
- Java 泛型 通配符类型
		Java 泛型 通配符类型 @author ixenos 摘要:限定通配符类型.无限定通配符类型.与普通泛型区别.通配符捕获 通配符类型 通配符的子类型限定(?都是儿孙) <? extends ... 
- Java泛型:类型擦除
		类型擦除 代码片段一 Class c1 = new ArrayList<Integer>().getClass(); Class c2 = new ArrayList<String& ... 
- Java泛型之类型擦除
		类型擦除 学过C++模板的,在使用Java泛型的时候,会感觉到有点不疑问,例如:(1)无法定义一个泛型数组.无法调用泛型参数对象中对应的方法(当然,通过extends关键字是可以做到,只是比较麻烦): ... 
- JAVA基础_反射获取泛型参数类型
		我经常会想获取参数的实际类型,在Hibernate中就利用的这一点. domain: Person.java public class Person { // 编号 private Long id; ... 
- Java泛型之类型未被擦除
		大家都知道Java源码在编译之后会擦除泛型信息,现在来看一种泛型未被擦除的情况,见ConcurrentHashMap.comparableClassFor方法. ParameterizedType.g ... 
- Java泛型-类型擦除
		一.概述 Java泛型在使用过程有诸多的问题,如不存在List<String>.class, List<Integer>不能赋值给List<Number>(不可协变 ... 
- 转:有关Java泛型的类型擦除(type erasing)
		转载自:拈花微笑 自从Java 5引入泛型之后,Java与C++对于泛型不同的实现的优劣便一直是饭后的谈资.在我之前的很多training中,当讲到Java泛型时总是会和C++的实现比较,一般得出的结 ... 
- java 泛型的类型擦除与桥方法
		泛型类 --代码参考:java核心技术 卷1 第十版 public class Pair<T> { private T first; private T second; //构造器 pub ... 
随机推荐
- 【刷题】BZOJ 2049 [Sdoi2008]Cave 洞穴勘测
			Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ... 
- SpringBoot之mongoTemplate的使用
			springboot的版本1.5.17.RELEASE. 1.mongo的IP和端口 在resources下的application.properties中加入如下内容 spring.data.mon ... 
- 【poj3294】 Life Forms
			http://poj.org/problem?id=3294 (题目链接) 题意 给定 n 个字符串,求出现在不小于 k 个字符串中的最长子串. Solution 后缀数组论文题.. 将 n 个字符串 ... 
- 编译安装haproxy开启支持SSL
			1.下载程序包 # wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.5.tar.gz # tar xvf haproxy-1.7.5. ... 
- 解题: SDOI 2011 染色
			题面 强行把序列问题通过树剖套在树上...算了算是回顾了一下树剖的思想=.= 每次树上跳的时候注意跳的同时维护当前拼出来的左右两条链的靠上的端点,然后拼起来的时候讨论一下拼接点,最后一下左右两边的端点 ... 
- go递归打印指定目录下的所有文件及文件夹
			func treedir(fpath string){ // 获取fileinfo if finfo,err := os.Stat(fpath); err == nil { // 判断是不是目录 如果 ... 
- 使用spring cache和ehcache
			一.spring cache Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该 ... 
- Qt 查找功能
			版权声明 该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处! 导语 这一篇我们来加上查找菜单的功能.因为要涉及Qt Creator的很多实用功 ... 
- HDU 3943 数位dp+二分
			K-th Nya Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) ... 
- P1075 质因数分解
			P1075 质因数分解 题目描述 已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数. 输入输出格式 输入格式: 一个正整数 n . 输出格式: 一个正整数 p ,即较大的那个质数. ... 
