Java获取泛型的Class对象
来源:互联网 发布:健身软件哪个好 编辑:程序博客网 时间:2024/04/27 23:25
tomcat中exec引起的权限问题
在做解析excel的时候,想通过泛型把解析和转java bean的过程封装起来,后面发现java里面只能获取到父类的泛型Class。这样的话,就意味着如果获取泛型Class来实例化bean对象,那么每出现一种excel模板就需要定义一个空实现,把具体的bean Class通过泛型传过去。最后决定增加一个Class<?>参数来传递bean Class。这里记录一下Java获取泛型的Class对象的demo和注意事项。
一、获取泛型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<E>
public class BaseService<E> {public Class<?> getEntityClass() {return GenericSuperclassUtil.getActualTypeArgument(this.getClass());}}
@Testpublic void testBaseService() {System.out.println(new BaseService<User>().getEntityClass());// 控制台输出:null}
定义UserService,用来测试使用父类时泛型Class的获取
UserService,继承BaseService<E>
public class UserService extends BaseService<User> {}class User {}
测试UserService.getEntityClass()
@Testpublic void testUserService() {System.out.println(new UserService().getEntityClass());// 控制台输出:class User}
阅读全文
0 0
- Java获取泛型的Class对象
- Java获取泛型的Class对象
- java创建一个对象获取泛型的class
- Java通过Class的对象来获取泛型的class示例
- java 创建一个Class的对象来获取泛型的class
- Java通过Class的对象来获取泛型的class示例
- Java通过Class的对象来获取泛型的class示例
- java获取class对象的方法
- java 反射机制 之 Class.forName() 获取class的对象
- JAVA泛型应用-获取容器运行时的泛型Class对象
- Java 类型信息 —— 获取泛型类型的类对象(.class)
- java获取泛型的class
- 关于Java的泛型在所声明的对象中如何获取class或者实例的方法的总结
- 关于Java的泛型在所声明的对象中如何获取class或者实例的方法的总结
- Java 获取T.class(动态泛型class获取)
- 四种获取Class对象的方法 Java反射机制
- Java中获取Class对象的三种方法
- java反射之——获取Class对象的方法
- 【一些网站的收集】包含机器学习深度学习大牛主页等、 牛人主页(主页有很多论文代码)【真的好强大】
- JAVA常用类之格式化
- Choose Between optimoptions and optimset
- 2018年中国电商与零售创新国际峰会邀请函
- 智能手机传感器到底有什么用
- Java获取泛型的Class对象
- theamleaf+es6+vue+vux+webpack之theamleaf模板装饰
- 五分钟学GIS | 快速认识Leaflet
- nginx 配置文件详解
- Pure vue demo 实战第一节:Vue基础一
- 在华科如何利用ipv6优雅的访问google
- [APP] 配置 ISCSI 服务
- ButterKnife使用详解
- 高通平台android开发总结