[英]Passing dynamic method name to another method as parameter in java
我有一個調用方法為 genJsonPayload()。 在這個方法中,我調用了一個 replace() 方法來用隨機生成的值替換一些字符串。 我想通過傳遞另一個方法作為參數來調用 replace()。 我的示例代碼如下。
public static StringBuffer replace(String jsonparam, StringBuffer jsondata, String replacedWith) {
int start = 0;
int last = 0;
while (jsondata.indexOf(jsonparam)!= jsondata.lastIndexOf(jsonparam)) {
start = jsondata.indexOf(jsonparam);
last = start + jsonparam.length();
jsondata = jsondata.replace(start,last,replacedwith);
}
start = jsondata.indexOf(jsonparam);
last = start + jsonparam.length();
jsondata = jsondata.replace(start,last,replacedwith);
return jsondata;
}
public String genJSONPayload(String jsonpayload) {
StringBuffer sbuffer = new StringBuffer(jsonpayload);
try {
jsondata = replace("expectedAreaCode",jsondata, CreateRandom.createAreaCDRandom());
}
catch (Exception e) {
....
}
try {
jsondata = replace("expectedextensionNo",jsondata, CreateRandom.createExtensionNumberRandom());
}
catch (Exception e) {
....
}
}
Json 有效載荷如下:
{
...
...
"phonenumber": [
{
"areaCode": "expectedAreaCode",
"extensionNo": "expectedextensionNo",
...
}
{
"areaCode": "expectedAreaCode",
"extensionNo": "expectedextensionNo",
...
}
{
"areaCode": "expectedAreaCode",
"extensionNo": "expectedextensionNo",
...
}],
...
...
}
注意: CreateRandom.createAreaCDRandom() 返回一個隨機字符串。
問題陳述:我的要求是使用 replace() 方法將 json 文件的“expectedAreaCode”替換為隨機生成的區號。 但是,由於我只從 genJSONPayload() 執行 CreateRandom.createAreaCDRandom() 一次,因此 replace() 方法中的 replaceWith 使用固定區號和 json 數組電話號碼中的所有區號進行存儲,我得到相同的區號。
問題:
我可以通過 createAreaCDRandom() static 方法作為參數而不是從 genJSONPayload 執行 createAreaCDRandom() 方法,而不是將 replaceWith String 傳遞給 replace() 方法,然后我將在 while 循環內多次在 replace 方法中執行它。 我有超過5個這樣的隨機mentods,基本上針對不同的json參數。 如何將 createAreaCDRandom()、createExtensionNumberRandom() 等方法作為 respace() 方法中的參數傳遞?
Use Supplier class as a method parameter ( https://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html ).
然后您可以通過 lambda 或方法參考來提供值生成邏輯。
public static StringBuffer replace(String jsonparam, StringBuffer jsondata, Supplier<String> supplier) {
int start = 0;
int last = 0;
while (jsondata.indexOf(jsonparam) != jsondata.lastIndexOf(jsonparam)) {
start = jsondata.indexOf(jsonparam);
last = start + jsonparam.length();
jsondata = jsondata.replace(start, last, supplier.get());
}
start = jsondata.indexOf(jsonparam);
last = start + jsonparam.length();
jsondata = jsondata.replace(start, last, supplier.get());
return jsondata;
}
public String genJSONPayload(String jsonpayload) {
StrignBuffer sbuffer = new StrignBuffer(jsonpayload);
try{
jsondata = replace("expectedAreaCode",jsondata, CreateRandom::createAreaCDRandom);
}
catch(Exception e){
....
}
try{
jsondata = replace("expectedextensionNo",jsondata, CreateRandom::createExtensionNumberRandom);
}
catch(Exception e){
....
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.