前序
整理了两个最靠谱的泛型类类型获取方法,快来看看
子目录
《工具类篇3——反射工具类(方法反射)》
《工具类篇3——反射工具类(对象反射)》
《工具类篇3——反射工具类(获取泛型类型)》
工具类全都是阿里代码规范与SonalLint扫描通过的,可以放心使用!
本工具包的公网Maven引用地址如下
<dependency>
<groupId>com.gitee.taotaojs</groupId>
<artifactId>comn-basic</artifactId>
<version>1.0.0</version>
</dependency>
直接引用即可。
之后我也会出一个关于上传公网的踩坑手册,以及发布一下我用的CheckStyle文件检查相关异味,敬请期待!
【附上仓库地址】
阿里云的Maven仓库
sonatype仓库
主要功能
- 获取Class中的泛型类类型
功能详解
在使用了泛型的类中继承此类,即可使用setIndex来获取第index个泛型的类类型
具体代码
package com.gitee.taotaojs.util.reflect;
import lombok.Data;
import java.lang.reflect.ParameterizedType;
/**
* 在代码块中使用setIndex(index)设置获取的泛型坐标
* @author TaoTaojs
* @date 2019年11月19日15:56:28
* 关联类:
* 参考链接:
*/
@Data
public class GenericityOperationSuper<T> {
/** 泛型的类型 */
private Class<T> entityClass;
/** 被获取的泛型的下标,可自设定 */
private int index = 0;
public GenericityOperationSuper(){
baseHibernateEntityDao();
}
public GenericityOperationSuper(int i){
setIndex(i);
baseHibernateEntityDao();
}
@SuppressWarnings("unchecked")
public void baseHibernateEntityDao() {
entityClass =(Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[index];
}
}
PS:什么?父类不够用了?想要简单点,那直接用下面的方法
方法二
- 在类上增加一个class属性
- 在类的构造方法上使用ParameteriaedType初始化calss属性
- 要哪个泛型类型,就写指定的下标即可
具体代码如下
/** 不要导错包哈 */
import java.lang.reflect.ParameterizedType;
class XXX<T, V>(){}
/** 泛型类类型 */
protected final Class<T> clazz;
protected final Class<T> clazzDTO;
XXX(){
ParameterizedType type = (ParameterizedType) this.getClass()
.getGenericSuperclass();
this.clazz = (Class<T>) type.getActualTypeArguments()[0];
this.clazzDTO = (Class<V>) type.getActualTypeArguments()[1];
}
文章链接
《工具类篇1——POI工具类》——待更新
《工具类篇2——集合工具类》
《工具类篇3——反射工具类》(共三篇)
《工具类篇4——大数字工具类》(共三篇)——待更新
《工具类篇5——时间戳工具类》(共两篇)——待更新
《工具类篇6——字符串工具类》——待更新
《工具类篇7——线程池工具类》——待更新
《…》