通過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...