簡體   English   中英

將動態方法名稱作為 java 中的參數傳遞給另一個方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM