很多朋友都想知道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
BaseService
public?class?BaseService?{ public?Class>?getEntityClass()?{ return?GenericSuperclassUtil.getActualTypeArgument(this.getClass()); } }
測試BaseService.getEntityClass()
@Testpublic?void?testBaseService()?{ System.out.println(new?BaseService().getEntityClass());//?控制臺輸出:null }
以上就是小編今天的分享,希望可以幫到大家。