Java 使用反射獲取型別資訊

2021-08-28 05:51:50 字數 1453 閱讀 1724

總結最近寫了大量需要根據類屬性的型別反射注入值的**,總結了以下常用的反射技巧:

在這個類中,有普通的string型別,有陣列型別,有帶泛型的list型別,有巢狀list型別,以及有多個泛型引數的簡單類,這個類將作為我們後面的內容的基礎。我們這一次部落格解析如何使用反射獲取到不同屬性的型別值。

public

class

some

普通型別的變數直接field.gettype()即可以獲取到他們的型別

public

void

querynametype()

throws nosuchfieldexception

陣列型別不像其他的型別可以通過isassignablefrom()函式來進行判斷,他需要使用isarray()來判斷該type是否是乙個陣列型別,然後使用getcomponenttype()獲取他的元素的型別

public

void

queryarraytype()

throws nosuchfieldexception

else

}

帶泛型的型別就是類似於list這樣的型別,我們現在的任務就是獲取到string這個型別。

parameterizedtype表示引數化的型別,例如collection這樣的型別。我們可以通過getgenerictype()方法獲得該子類,當你的型別帶有引數的時候就會返回parameterizedtype,否則會返回普通的型別(class)

那麼具體是怎麼操作的呢?

以獲得list的型別為例子

public

void

getlisttype()

throws nosuchfieldexception

else

}

假如是list> 如何獲得最裡面的型別呢?

例子如下

public

void

getsublisttype()

throws nosuchfieldexception

public

static type getbasetype

(type genericreturntype)

else

}

與第三個例子相似,只需要使用actualtypes陣列按順序取即可

例子如下

public

void

getmaptype()

throws nosuchfieldexception

else

}

以上總結了幾種常用的使用反射獲取屬性型別的例子,稍加改造就可以寫自己的工具類了。希望對大家有幫助^_^

反射獲取型別

winform開發中經常使用反射來動態配置程式!例如將所有窗體放到乙個dll裡使用的時候通過反射來載入窗體以實現靈活配置!今天就針對反射獲取型別給出自己的一些 using system using system.io using system.collections.generic using st...

C 使用反射機制獲取類資訊

用反射動態建立類例項,並呼叫其公有成員函式。新建乙個類庫專案,增加乙個getsum方法。using system namespace classlibrary1 public int getsum int x,int y 再另建乙個專案,在專案中引用上面生成的classlibrary1.dll sy...

java反射獲取成員變數

a 獲得類的成員變數 陣列 1 getfields 公共類的 2 getdeclaredfields 所有型別的 b 獲得類的單個成員變數 1 getfield 公共類的 2 getdeclaredfield 所有型別的 a.1 獲得類的公共成員變數 獲取類的位元組碼檔案物件 class c cla...