开心生活站

位置:首页 > IT科技 > 

java获取泛型class

IT科技2.98W

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

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

获取泛型Class的方法

Class类的方法:

public Type getGenericSuperclass()

方法作用:

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

ParameterizedType类的方法:

Type[] getActualTypeArguments()

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

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

java获取泛型class

二、获取泛型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>,用来测试不使用父类时泛型Class的获取

BaseService<E>

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

测试BaseService.getEntityClass()

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

标签:java 获取 泛型 class