Java中怎么利用反射來(lái)獲取泛型信息-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)Java中怎么利用反射來(lái)獲取泛型信息,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到恩平網(wǎng)站設(shè)計(jì)與恩平網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋恩平地區(qū)。

一 點(diǎn)睛

獲得了Field對(duì)象后,就可以很容易地獲得該Field的數(shù)據(jù)類(lèi)型,即使用如下代碼即可獲得指定Field的類(lèi)型:

//獲取Field對(duì)象f的類(lèi)型Class<?> a = f.getType();

通過(guò)這種方式只對(duì)普通類(lèi)型的Field有效。但如果該Field的類(lèi)型是有泛型限制的類(lèi)型,如Map<String , Integer>類(lèi)型,則不能準(zhǔn)確的得到該Field的泛型參數(shù)。

為了獲得指定Field的泛型類(lèi)型,應(yīng)先使用如下方法來(lái)獲取指定Field的泛型類(lèi)型:

//獲得Field實(shí)例f的泛型類(lèi)型Type gType = f.getGenericType();

然后將Type對(duì)象強(qiáng)制類(lèi)型轉(zhuǎn)換為ParameterizedType對(duì)象,ParameterizedType代表被參數(shù)化的類(lèi)型,也就是增加了泛型限制的類(lèi)型。ParameterizedType類(lèi)提供了兩個(gè)方法:

getRawType():返回被泛型限制的類(lèi)型。

getActualTypeArguments():返回泛型參數(shù)類(lèi)型。

二 實(shí)戰(zhàn)

1 代碼

import java.util.*;import java.lang.reflect.*;public class GenericTest{  private Map<String , Integer> score;  public static void main(String[] args)    throws Exception  {    Class<GenericTest> clazz = GenericTest.class;    Field f = clazz.getDeclaredField("score");    // 直接使用getType()取出的類(lèi)型只對(duì)普通類(lèi)型的成員變量有效    Class<?> a = f.getType();    // 下面將看到僅輸出java.util.Map    System.out.println("score的類(lèi)型是:" + a);    // 獲得成員變量f的泛型類(lèi)型    Type gType = f.getGenericType();    // 如果gType類(lèi)型是ParameterizedType對(duì)象    if(gType instanceof ParameterizedType)    {      // 強(qiáng)制類(lèi)型轉(zhuǎn)換      ParameterizedType pType = (ParameterizedType)gType;      // 獲取原始類(lèi)型      Type rType = pType.getRawType();      System.out.println("原始類(lèi)型是:" + rType);      // 取得泛型類(lèi)型的泛型參數(shù)      Type[] tArgs = pType.getActualTypeArguments();      System.out.println("泛型信息是:");      for (int i = 0; i < tArgs.length; i++)      {        System.out.println("第" + i + "個(gè)泛型類(lèi)型是:" + tArgs[i]);      }    }    else    {      System.out.println("獲取泛型類(lèi)型出錯(cuò)!");    }  }}

關(guān)于Java中怎么利用反射來(lái)獲取泛型信息就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

文章名稱(chēng):Java中怎么利用反射來(lái)獲取泛型信息-創(chuàng)新互聯(lián)
文章出自:http://muchs.cn/article38/dpjisp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、品牌網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站、搜索引擎優(yōu)化、商城網(wǎng)站、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)