java获取泛型class

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java获取泛型class相关的知识,希望对你有一定的参考价值。

参考技术A 很多朋友都想知道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获取泛型 Class

//得到泛型的Class
private Class<T> entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

 

 

 

以上是关于java获取泛型class的主要内容,如果未能解决你的问题,请参考以下文章

Java获取泛型的Class对象

java泛型T和class.getName一样吗?

如何在运行时获取泛型的类型

在java中,使用泛型,比如说T,但是T.class就要报错。我想获取T的class对象怎样获取啊。

java 反射和泛型-反射来获取泛型信息

Java 如何获取泛型T的T.class当参数