方法出參自動賦值

2021-09-06 14:44:26 字數 1665 閱讀 1540

1.技術點

反射,泛型,object,遞迴

2.參考原始碼

/**

* created by jeremy.liang on 2018/9/3.

*/public class setterutils

public static object testreturnsetmethod(class clz) throws exception

//params - 方法引數list,argarray-引數初值

parameter params = method.getparameters();

object argarray = new object[params.length];

int i = 0;

//理論上我們的方法只有乙個引數要賦值

for(parameter para :method.getparameters())

else if(type.tostring().endswith("int") || type.tostring().endswith("integer"))else if(type.tostring().endswith("byte") || type.tostring().endswith("byte"))else if(type.tostring().endswith("bigdecimal") )else if(type.tostring().endswith("list")) else if(typeinone.tostring().endswith("int") || typeinone.tostring().endswith("integer"))else if(typeinone.tostring().endswith("byte") || typeinone.tostring().endswith("byte"))

else if(type.tostring().endswith("bigdecimal") )

else

listtemplists = new arraylist<>();

templists.add(tempobj2lst);

argarray[i++] = templists;

}else

}else

}else

}//呼叫相應setter method例項化即可,並且傳入符合的初始化引數,否則報methodnofound方法

method.invoke(object,argarray);

system.out.println(object);

}return object;

}}

3.總結

一開始走了一段彎路,思路是:先遍歷vo的所有field,得到name/type,判斷了name的型別之後,再構造setname的方法,然後再關聯其setfield的方法,在處理自動裝箱等這些方法不好操作,

由於 反射獲取方法不支援自動裝箱或拆箱,那反射呼叫方法支援自動裝箱或拆箱,並且處理list<>的泛型類引數時候有點繞,其實也可以做到->已實現

但是後來參考了一些網上的思想,再去看了看rpc的實現方法,其實沒必要檢測field,對於我的需求來說,我只需要把所有setter方法遍歷一遍,然後invoke一次,就能得到效果,並不需要兩層轉化等關係~~思路更加清晰且容易實現

4.類似swagger、**遷移指令碼,xml配置讀取,大致也是按照這些思路

使用AOP 註解實現記錄方法入參出參

有時候我們希望記錄某些方法的入參出參,但是有的時候切面可能把所有符合條件的切面的入參出參都記錄了,沒有很多的必要,有些方法記錄入參出參沒有過大的意義,所以我們可以利用註解 aop 實現針對註解方法的入參出參記錄 註解類 target retention retentionpolicy.runtime...

MatchZoo高階 自動調參方法

本人在這裡已經給出了matchzoo的乙個簡單上手,這一次我會給出為模型自動調參的方法。這一次使用的變數,和簡單上手中的變數是一樣的,所以我都是直接複製,並刪掉一些不需要的地方。載入資料 train pack processed preprocessor.fit transform train 其實...

作為入參的出參指標

若實為入參,則是傳入資料,此時一般為char 即傳入讀取資料的位址 若實為出參 1維指標,若已經為該位址申請記憶體或該指標指向一塊可改寫的記憶體區域,則一般為char 傳入欲寫入資料的位址 2維指標,若沒有為該位址申請記憶體,欲讓被呼叫函式在內部進行記憶體申請而在外部記憶體釋放,則必須傳入指標的位址...