java获取泛型class

作者:原创时间:2022-03-29
文档

很多朋友都想知道java怎么获取泛型class?下面就一起来了解一下吧~

获取泛型Class的方法

Class类的方法:

public Type getGenericSuperclass()

方法作用:

如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示超类的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅 ParameterizedType 声明。如果此 Class 表示 Object 类、接口、基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。

ParameterizedType类的方法:

Type[] getActualTypeArguments()

方法作用:返回表示此类型实际类型参数的 Type 对象的数组。

注意,在某些情况下,返回的数组为空。如果此类型表示嵌套在参数化类型中的非参数化类型,则会发生这种情况。

二、获取泛型Class对象

(解析Excel的类代码较多,这里定义几个简单的类记录)

定义获取泛型Class对象的工具类

GenericSuperclassUtil

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class GenericSuperclassUtil {
/*
* 获取泛型类Class对象,不是泛型类则返回null
*/
public static Class getActualTypeArgument(Class clazz) {
Class entitiClass = null;
Type genericSuperclass = clazz.getGenericSuperclass();
if (genericSuperclass instanceof ParameterizedType) {
Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass)
.getActualTypeArguments();
if (actualTypeArguments != null && actualTypeArguments.length > 0) {
entitiClass = (Class) actualTypeArguments[0];
}
}
return entitiClass;
}
}

定义BaseService,用来测试不使用父类时泛型Class的获取

BaseService

public class BaseService {
public Class getEntityClass() {
return GenericSuperclassUtil.getActualTypeArgument(this.getClass());
}
}

测试BaseService.getEntityClass()

@Testpublic void testBaseService() {
System.out.println(new BaseService().getEntityClass());// 控制台输出:null
}

以上就是小编今天的分享,希望可以帮到大家。

显示全文
java core java获取秒级时间戳 java crash java获取网络时间 java crontab java获取视频时长 java csrf java获取请求域名 java获取路径 java cssbox java获取运行时间 java ctp java获取随机字符串 java daemon java获取随机数 java dashboard java获得当前路径 java表单校验 java dataframe java规则引擎 java corba java cookie java获取本地ip java controller java获取本周日期 java context japanese java 微信怎么群发消息 java获取时间差 java获取文件名后缀 微博账号怎么注销 excel如何换行 java获取当月最后一天日期 excel去重 java获取当前项目的路径 QQ怎么强制解绑手机号 java获取当前路径的几种方法 华为手机怎么添加桌面小组件 java获取当前目录路径 java获取当前目录