深入理解java泛型詳解 java怎么獲取一個(gè)泛型方法的真實(shí)泛型類(lèi)型?
java怎么獲取一個(gè)泛型方法的真實(shí)泛型類(lèi)型?在我看來(lái),從一個(gè)方法中獲取泛型方法的真正泛型類(lèi)型是可行的,但是通過(guò)一個(gè)方法獲取泛型方法的真正泛型類(lèi)型應(yīng)該是不可能的。首先,Java中的泛型也稱(chēng)為參數(shù)化類(lèi)型。
java怎么獲取一個(gè)泛型方法的真實(shí)泛型類(lèi)型?
在我看來(lái),從一個(gè)方法中獲取泛型方法的真正泛型類(lèi)型是可行的,但是通過(guò)一個(gè)方法獲取泛型方法的真正泛型類(lèi)型應(yīng)該是不可能的。
首先,Java中的泛型也稱(chēng)為參數(shù)化類(lèi)型。正確地記住,泛型應(yīng)該是jdk5引入的特性。泛型的目的是使數(shù)據(jù)類(lèi)型能夠作為參數(shù)傳入,以便可以動(dòng)態(tài)更改變量的數(shù)據(jù)類(lèi)型。
那么什么是通用方法?泛型類(lèi)型是在方法上聲明的。只有在調(diào)用方法時(shí)才會(huì)傳入實(shí)類(lèi)型。如果在方法中得到它,可以直接調(diào)用泛型對(duì)象的getClass方法。但是如果你想通過(guò)一個(gè)方法得到一個(gè)泛型方法的真正類(lèi)型,我不認(rèn)為它可以實(shí)現(xiàn)。因?yàn)椴徽{(diào)用方法時(shí),不會(huì)輸入實(shí)數(shù)據(jù)類(lèi)型,因此根本無(wú)法獲取泛型對(duì)應(yīng)的實(shí)類(lèi)型。
所以我將討論如何在泛型方法中獲得泛型的真實(shí)類(lèi)型。
舊規(guī)則,讓我們編寫(xiě)一個(gè)代碼來(lái)解釋。泛型方法的示例如下圖所示:
在上圖中,我聲明了一個(gè)泛型方法:findfirst,用于獲取數(shù)組的第一個(gè)元素。
運(yùn)行結(jié)果如下:
以上是我的答案。希望它能幫到你
~]/**獲取字段的類(lèi)型。如果是復(fù)合對(duì)象,則獲取泛型類(lèi)型**@param field*@return*/private static class getfieldclass(field field){class fieldclazz}=字段.getType()如果(fieldClazz.isAssignableFrom文件( List.class類(lèi))){類(lèi)型fc=field.getGenericType類(lèi)型()//如果是列表類(lèi)型,獲取其泛型類(lèi)型if(FC instanceof parameteredType)//如果是泛型參數(shù)類(lèi)型{parameteredType Pt=(parameteredType)FC fieldclazz=(class)pt.getActualTypeArguments參數(shù)()[0]//獲取泛型中的類(lèi)類(lèi)型對(duì)象。}這些天我們只是寫(xiě)了相關(guān)的代碼作為參考
t.getclass()或t.class是非法的,因?yàn)閠是一個(gè)泛型變量。因?yàn)轭?lèi)的類(lèi)型是在編譯時(shí)處理的,所以在運(yùn)行時(shí)不能直接從基中獲取實(shí)際的t類(lèi)型。還有一種替代實(shí)現(xiàn):導(dǎo)入java.lang.reflect文件.Arrayimport導(dǎo)入java.lang.reflect文件.參數(shù)化類(lèi)型導(dǎo)入java.lang.reflect文件.Typepublic類(lèi)泛型擴(kuò)展基