導航:首頁 > 編程語言 > 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泛型獲取屬性相關的資料

熱點內容
資料庫查詢系統源碼 瀏覽:619
php5314 瀏覽:359
完美國際安裝到哪個文件夾 瀏覽:671
什麼app可以掃一掃做題 瀏覽:542
程序員編碼論壇 瀏覽:927
淘點是什麼app 瀏覽:662
中國高等植物pdf 瀏覽:455
51單片機時間 瀏覽:185
後台如何獲取伺服器ip 瀏覽:269
單片機流水燈程序c語言 瀏覽:237
程序員第二職業掙錢 瀏覽:242
運行里怎麼輸入伺服器路徑 瀏覽:844
pythonstepwise 瀏覽:513
劉一男詞彙速記指南pdf 瀏覽:67
php認證級別 瀏覽:372
方舟編譯啥時候推送 瀏覽:1013
php手機驗證碼生成 瀏覽:678
哲學思維pdf 瀏覽:19
凌達壓縮機有限公司招聘 瀏覽:537
weblogic命令部署 瀏覽:40