通過反射來操作列舉

2021-10-11 15:34:41 字數 1879 閱讀 9232

通過class來獲取任意列舉常量裡面的值和方法

先準備資料

enum testenum

testenum

(integer dictkey, string dictvalue, integer dictindex)

public integer getdictkey()

public string getdictvalue()

public integer getdictindex()

}

那麼怎麼通過class來獲取列舉裡面的值呢

思路一:獲取所有方法然後想辦法篩選出我們想要的方法即可

思路二:獲取所有字段(field),篩選出來私有非靜態字段,然後根據欄位名拼接get來獲取對應的方法

class

testenumclass = testenum.

class

; class

clazz =

(class

) class.

forname

(testenumclass.

getname()

);//獲取常量

enum[

] enumconstants = clazz.

getenumconstants()

;//獲取public欄位

//field publicfields = poenumclass.getfields();

//獲取私有非靜態字段

list

privatefields =

newarraylist

<

>()

; list

methodlist =

newarraylist

<

>()

; field[

] fields = testenumclass.

getdeclaredfields()

;for

(field field:fields)

}

首字母轉大寫

private

static string getmethodname

(string fildename)

throws exception

讓我們打斷點看一下篩選出來的方法

剩下的就直接根據方法獲取值即可

完整**

@test

public

void

test()

throws exception

} map

datamap =

newhashmap

<

>()

;for

(method method:methodlist)

datamap.

put(method.

getname()

,datalist);}

system.out.

println

(datamap);}

private

static string getmethodname

(string fildename)

throws exception

結果

C 通過反射獲取列舉值列表

通過type.getfields bindingflags.static 獲取列舉值列表,然後通過fieldinfo.getvalue null 就能獲取到值,注意是傳入null,像獲取靜態值和常量那樣。返回的值可以直接強轉為int,因為列舉的基礎型別就是int。如果獲取所有的字段資訊,會發現裡面有...

異常 反射 列舉

1 包裝類 1 作用 將8 種基本資料型別包裝成類的形式 2 integer character float double byte short long boolean 3 character boolean 繼承與object 類 其餘的繼承於 number類 2 裝箱與拆箱 1 裝箱 將基本資...

通過反射,如何將數值型列舉值賦值給列舉型別的屬性

處理可空列舉型別 原理它是值型別,原始寫法是nullable,泛型可以有多個型別引數,但資料庫的乙個欄位只會有乙個型別,所以判斷第乙個型別引數是否是列舉 if prop.propertytype.isvaluetype prop.propertytype.isgenerictype prop.pro...