java反射學(xué)習(xí)筆記:getParameterTypes和getGenericParameterTypes區(qū)別

環(huán)境
Java:1.8
Intellij IDEA:2019.2.4

前言
最近在寫導(dǎo)出程序,對getGenericParameterTypes和getParameterTypes兩個方法的區(qū)別產(chǎn)生了好奇衙耕。

區(qū)別
這兩個方法都是用來獲取方法形參類型的。

getGenericParameterTypes:返回Type類型的數(shù)組 Type[].
getParameterTypes:返回Class類型的數(shù)組: Class<?>[].

Type是一個高級接口已维;具體的說明來看一段網(wǎng)上的解釋:

Type 是所有類型的高級公共接口芭梯,當(dāng)然也是Class的父類。
它們包括原始類型觉痛、參數(shù)化類型琴儿、數(shù)組類型段化、類型變量和基本類型。

先來看一下Type 的用法:
①type是一種表示編程語言中的所有類型的類超級接口:
如:int造成、Integer显熏、String 這都是表示一編程語言的類型,而其中的 int.class晒屎、Integer.class喘蟆、String.class 它們表示的是類型的實例缓升。

②我們以前學(xué)習(xí)的反射 Class c = Integer.class,Class相當(dāng)于表示類型的類,而Integer.class 則是一種名為整形類型的類型實例蕴轨。

③理解了上面的那些港谊,其理解 type就不難了,type 與 class 一樣橙弱,不過 type是一種比Class 表示范圍還要廣的超級接口歧寺,它表示Java語言中類型的所有接口。

示例代碼
首先假設(shè)有這么一個類:SampleClass

這個類有兩個屬性棘脐,一個String類型成福,一個泛型List<Integer>。

import java.util.List;
public class SampleClass {
    private String sampleField;
    private List<Integer> ids;
    public String getSampleField() {
        return sampleField;
    }
    public void setSampleField(String sampleField) {
        this.sampleField = sampleField;
    }
    public List<Integer> getIds() {
        return ids;
    }
    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }
}

然后寫測試代碼:

public static void main(String[] args) {
        Class sampleClassClass = SampleClass.class;
        Method[] methods = sampleClassClass.getMethods();
        for (Method method : methods) {
            System.out.println("------------------" +method.getName());
            Type[] genericParameterTypes = 
            method.getGenericParameterTypes();
            Class<?>[] parameterTypes = method.getParameterTypes();
            for(Class parameterType: parameterTypes){
                System.out.println(parameterType + "===="+
                parameterType.getName());
            }
            for (int i = 0; i < genericParameterTypes.length; i++) {
                System.out.println(genericParameterTypes[i] + 
                "=====" + genericParameterTypes[i].getTypeName());
            }
        }

運行結(jié)果如下:


image.png

① String類型荆残,這兩個方法返回的結(jié)果是一樣的
② List<Integer> ,getParameterTypes 只返回了類型净当,泛型沒有返回内斯;
而getGenericParameterTypes返回的是完整的泛型。

結(jié)論
①如果方法參數(shù)不是參數(shù)化類型(泛型)像啼,那么getParameterTypes和getGenericParameterTypes返回的結(jié)果是一樣的俘闯。
②如果方法參數(shù)是泛型,這時就有區(qū)別了忽冻,getGenericParameterTypes會返回完整的信息真朗,而getParameterTypes只會返回參數(shù)類型,參數(shù)化類型無法得到僧诚。

獲取參數(shù)化類型
// 將類型向參數(shù)化類型轉(zhuǎn)換
ParameterizedType t = (ParameterizedType)genericParameterTypes[0];
// 可以得到參數(shù)化類型的參數(shù)實例
t.getActualTypeArguments()[0];

參考地址:
反射得到參數(shù)化類型中的類型參數(shù)

https://www.yiibai.com/javareflect/javareflect_method_getgenericparametertypes.html

https://www.yiibai.com/javareflect/javareflect_method_getparametertypes.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遮婶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子湖笨,更是在濱河造成了極大的恐慌旗扑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慈省,死亡現(xiàn)場離奇詭異臀防,居然都是意外死亡,警方通過查閱死者的電腦和手機边败,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門袱衷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笑窜,你說我怎么就攤上這事致燥。” “怎么了怖侦?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵篡悟,是天一觀的道長谜叹。 經(jīng)常有香客問我,道長搬葬,這世上最難降的妖魔是什么荷腊? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮急凰,結(jié)果婚禮上女仰,老公的妹妹穿的比我還像新娘。我一直安慰自己抡锈,他們只是感情好疾忍,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著床三,像睡著了一般一罩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撇簿,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天聂渊,我揣著相機與錄音,去河邊找鬼四瘫。 笑死汉嗽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的找蜜。 我是一名探鬼主播饼暑,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洗做!你這毒婦竟也來了弓叛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤竭望,失蹤者是張志新(化名)和其女友劉穎邪码,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咬清,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡闭专,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了旧烧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片影钉。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖掘剪,靈堂內(nèi)的尸體忽然破棺而出平委,到底是詐尸還是另有隱情,我是刑警寧澤夺谁,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布廉赔,位于F島的核電站肉微,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蜡塌。R本人自食惡果不足惜碉纳,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望馏艾。 院中可真熱鬧劳曹,春花似錦、人聲如沸琅摩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽房资。三九已至蜕劝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間轰异,已是汗流浹背熙宇。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溉浙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓蒋荚,卻偏偏與公主長得像戳稽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子期升,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容