PS:若轉載發布此文章或相關代碼,請注明出處,謝。
最近用到了reflct機制,此前并不熟悉,趁此機會留個底,怕忘記了,只是些小應用而已。
1. 動態匹配方法名字賦值
需求:
一個tempLoan bean里面有幾個屬性 setPsAddr11,setPsAddr12,setPsAddr13,但是從DB里面取出來的只有一個psAddr1 field值,值是
“A~B~C”的結構。需要分別把值A賦到psAddr11,B賦到psAddr12,C賦到psAddr13。
為了以免后面再增加屬性例如4,5,6之類的,不采取手工硬塞動作,故此采取反射,統一邏輯處理。
如下代碼:
2. 根據參數對應Bean里面的變量名,把Bean內所對應的變量的值賦給另一個變量
需求:
根據傳入參數一個變量名和一個BO,匹配BO里面的屬性,若與傳入變量名的值相同,則取BO對應屬性的值賦于另一變量
3. 這個比較尋常了,就是列出一個Class所有的全局變量名
//?Retrieve?global?variable?object?in?class
???Object?obj?=?new?Mytest();
????????Field[]?fields?=?obj.getClass().getDeclaredFields();

????????for?(int?i?=?0,?len?=?fields.length;?i?<?len;?i++)?
{
????????????String?varName?=?fields[i].getName();

????????????try?
{
????????????????boolean?accessFlag?=?fields[i].isAccessible();
????????????????fields[i].setAccessible(true);
????????????????Object?o?=?fields[i].get(obj);
????????????????System.out.println("Include?variable:"?+?varName?+?"?=?"?+?o);
????????????????fields[i].setAccessible(accessFlag);

????????????}?catch?(IllegalArgumentException?ex)?
{
????????????????ex.printStackTrace();

????????????}?catch?(IllegalAccessException?ex)?
{
????????????????ex.printStackTrace();
????????????}
????????}
?
最近用到了reflct機制,此前并不熟悉,趁此機會留個底,怕忘記了,只是些小應用而已。
1. 動態匹配方法名字賦值
需求:
一個tempLoan bean里面有幾個屬性 setPsAddr11,setPsAddr12,setPsAddr13,但是從DB里面取出來的只有一個psAddr1 field值,值是
“A~B~C”的結構。需要分別把值A賦到psAddr11,B賦到psAddr12,C賦到psAddr13。
為了以免后面再增加屬性例如4,5,6之類的,不采取手工硬塞動作,故此采取反射,統一邏輯處理。
如下代碼:
1
Class?tempLoanClass?=?tempLoan.getClass();
2
????????????????if(tempLoan.getPsAddr1()!=null)
{
3
????????????????????List<String>?psAddress1List?=?Arrays.asList(tempLoan.getPsAddr1().split("~"));
4
????????????????????for?(int?x?=?0;?x?<?psAddress1List.size();?x++)?
{
5
????????????????????????Method?method?=?tempLoanClass.getDeclaredMethod("setPsAddr1"?+?(x?+?1),?new?Class[]?
{?String.class?});
6
????????????????????????method.invoke(tempLoan,?new?Object[]?
{?psAddress1List.get(x)?});
7
????????????????????}????
8
????????????????}
如上用loop來映射set的方法,由對應的get方法取出來list的元素的值,按照順序動態賦給tempLoan 的set方法。 
2



3

4



5



6



7

8

2. 根據參數對應Bean里面的變量名,把Bean內所對應的變量的值賦給另一個變量
需求:
根據傳入參數一個變量名和一個BO,匹配BO里面的屬性,若與傳入變量名的值相同,則取BO對應屬性的值賦于另一變量
?1
public?void?setValueInField(Loan?loan,?String?fieldName,?String?fieldValue)?throws?Exception
{
?2
????????try
{
?3
????????????Class?tempLoanClass?=?loan.getClass();
?4
????????????Method[]?methods?=?tempLoanClass.getMethods();
?5
????????????for(int?x=0;?x<methods.length;?x++)
{
?6
????????????????String?methodName?=?methods[x].getName();
?7
????????????????if(methodName.indexOf("get")>-1)
{
?8
????????????????????if(methodName.substring(3,?methodName.length()).equalsIgnoreCase(fieldName))
{
?9
????????????????????????Object?value?=?methods[x].invoke(loan,?new?Object[]?
{});
10
????????????????????????if(value?!=?null)
{
11
????????????????????????????fieldValue?=?value.toString();
12
????????????????????????}
13
????????????????????}
14
????????????????}
15
????????????}
16
????????}catch(Exception?e)
{
17
????????????e.printStackTrace();
18
????????}
19
????}



?2



?3

?4

?5



?6

?7



?8



?9



10



11

12

13

14

15

16



17

18

19

3. 這個比較尋常了,就是列出一個Class所有的全局變量名

























?