總結最近寫了大量需要根據類屬性的型別反射注入值的**,總結了以下常用的反射技巧:
在這個類中,有普通的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...