導航:首頁 > 編程語言 > java泛型獲取屬性

java泛型獲取屬性

發布時間:2023-07-04 07:09:40

java獲取泛型


這段代碼放在BaseDaoImpl中,在for循環中列印的t就是T和PK。

最後得到的persistType就是T的實際類型。


解釋一下紅色的部分:

因為this代表你的實例,

如果這個實例是(用Integer做ID的Student數據對象為例)

BaseDaoImpl<Student, Integer>studentDao=new BaseDaoImpl<Student, Integer>();

這個實例的「范型父類」(getGenericSuperclass)就是BaseDao<Student, Integer>,

如果你的實例是BaseDaoImpl<T, PK>子類的實例,

那麼「范型父類」就是BaseDaoImpl<T, PK>,

反正不是HibernateDaoSupport,因為HibernateDaoSupport不帶范型。

最後,不管是BaseDaoImpl,還是BaseDao,getActualTypeArguments()都得到Class數組,內容是{T的類型,PK的類型},取第一個(下標0),就得到T的類型(例中為Student.class)。

Ⅱ java怎麼獲取一個泛型方法的真實泛型類型

不知道我對你的題目的理解對不對:有個方法返回一個 泛型 ,你想去這個 泛型 的類型是不是?

packagetest;

importjava.util.ArrayList;
importjava.util.List;

publicclassTest01{

publicstaticvoidmain(String[]args){
List<String>strings=newArrayList<String>();
strings.add("123");//模擬返回一個泛型

System.out.println(strings.getClass());//第一次取類型
System.out.println(strings.get(0).getClass());//假如通過第一步知道是ArrayList類型,則再取類型
}
}

輸出結果:

class java.util.ArrayList

class java.lang.String

這里只舉例講一下方法,不知道是不是你想要的,

Ⅲ java獲取泛型class

很多朋友都想知道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泛型獲取屬性相關的資料

熱點內容
哪裡找到轉轉app 瀏覽:577
蘋果二次app怎麼注冊 瀏覽:584
國際服體驗服伺服器為什麼爆滿 瀏覽:111
微信商城模板源碼 瀏覽:433
網頁的源碼怎麼讀取 瀏覽:399
ubuntu命令打開軟體 瀏覽:760
如何實現對講頻道加密 瀏覽:348
福州8000的程序員去深圳多少 瀏覽:641
保存加密是什麼意思 瀏覽:42
安裝不了軟體顯示加密目錄 瀏覽:908
php53下載64位 瀏覽:97
osip源碼結構 瀏覽:956
如何刪除加密網站 瀏覽:714
亞太碳交易app怎麼用 瀏覽:955
怎麼推銷程序員 瀏覽:500
程序員再就業求助 瀏覽:106
知網程序員如何做產品 瀏覽:531
圖片怎麼樣用文件夾發送 瀏覽:33
qq獲取qq頭像軟體源碼 瀏覽:548
視頻怎麼加密保護 瀏覽:72