IT科技

當前位置 /首頁/IT科技 > /列表

java獲取泛型class

<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}

TAG標籤:獲取 泛型 java class #