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 ...
随机推荐
- USACO Section 1.5 Prime Palindromes 解题报告
题目 题目描述 题目就是给定一个区间[a,b]((5 <= a < b <= 100,000,000)),我们需要找到这个区间内所有既是回文串又是素数的数字. 输入样例 5 500 ...
- DataTables实现rowspan思路
直接看例子吧 <table id="example" class="display table table-bordered" cellspacing=& ...
- All flavors must now belong to a named flavor dimension
FAQ: All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/ ...
- ImageView的android:scaleType各属性含义(zz)
android:scaleType是控制图片如何resized/moved来匹对ImageView的size.ImageView.ScaleType / android:scaleType值的意义区别 ...
- bzoj 2243
2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 8800 Solved: 3305[Submit][Status ...
- Python【经典类与新式类】
经典类多继承的调用方法顺序是:深度优先查询,如下图: 新式类多继承的调用方法顺序是:广度优先查询,如下图: 可以使用下面的代码进行实验验证: #经典类class A: def __init__ ...
- 解析Job,bpmn文件的小项目总结
1.在使用String类中split(String regex)切割字符串abcd.job遇得到job字符串时,直接使用split("."),导致数组超出界限错误 原因:得到的数组 ...
- location.href跳转测试
测试代码 <script type="text/javascript"> function ToUrl(x){ location.href=x; } </scri ...
- [Baltic2009]Radio Transmission
bzoj 1355: [Baltic2009]Radio Transmission http://www.lydsy.com/JudgeOnline/problem.php?id=1355 Time ...
- Java并发编程原理与实战三十八:多线程调度器(ScheduledThreadPoolExecutor)
在前面介绍了java的多线程的基本原理信息:线程池的原理与使用 本文对这个java本身的线程池的调度器做一个简单扩展,如果还没读过上一篇文章,建议读一下,因为这是调度器的核心组件部分. 我们如果要用j ...