-1

我正在使用多个参数制作此方法:createExportJob (String testId, Long otherId )减少重复代码。这个方法的例子应该是该方法应该使用的最少参数量。

private void createExportJob (String testId, Long otherId )  {
        String testname = getTestName(testId);

        Configuration config = itsExportService.getConfiguration();
        Map<String, String> params = new HashMap<>();
        params.put("EXAMPLE", config.getExample();
        params.put("EXAMPLENAME", config.getExampleName();
        params.put("TESTNAME", testName);
        ExportJob queuedJob = ExportQueue.addJob(params, testId, otherId);

    }

在某些情况下,我想在方法中包含更多内容params.putHashMap如下所示:

  params.put("THEYESNO", theYesNo ? "YES" : "NO"); 

或者

  params.put("COORDINATES", String.valueOf(minX)+","+String.valueOf(minY)+"
        ',"+String.valueOf(maxX)+","+String.valueOf(maxY));

如何使用更多输入参数重载此方法?或者有没有比重载更好的解决方案来解决这种情况?

4

2 回答 2

4

我建议使用Builder.

class ExportJobConfigBuilder {
 Map<String, String> params = new HashMap<>();
 public Map<String, String> build() {
  return params;
 }
 // fill basic data in constructor
 public ExportJobConfigBuilder (String name, Configuration config) {
  params.put("TESTNAME", name);
  params.put("EXAMPLE", config.getExample();
  params.put("EXAMPLENAME", config.getExampleName();
  return this;
 }
 public ExportJobConfigBuilder withCoords(int minX, int minY, int maxX, int maxY) {
  params.put("COORDINATES", String.format("%d,%d,%d,%d", minX, minY, maxX, maxY);
  return this;
 }
 public ExportJobConfigBuilder withYesNo(boolean yesNo) {
  params.put("THEYESNO", theYesNo ? "YES" : "NO");
  return this;
 }
}

现在,您在选择要添加的信息方面拥有最大的灵活性,而无需为每个组合添加单独的方法。你会用它来称呼它

ExportJobConfigBuilder builder = 
  new ExportJobConfigBuilder(getTestname(testId), itsExportService.getConfiguration());
builder.withCoords(minx, miny, maxx, maxy); // or not
builder.withYesNo(yesNo); // or not
Map<String, String> params = builder.build();

ExportJob job = ExportQueue.addJob(params, testId, otherId);

如果您需要在途中添加额外的参数,您只需向构建器添加一个方法,并且您可以保持现有代码不变。

于 2021-03-03T14:25:16.193 回答
1

我会做这样的事情:

private void createExportJob (String testId, Long otherId, Boolean theYesNo, Long minX, Long minY, Long maxX, Long maxY) {
            String testname = getTestName(testId);
    
            Configuration config = itsExportService.getConfiguration();
            Map<String, String> params = new HashMap<>();
            params.put("EXAMPLE", config.getExample();
            params.put("EXAMPLENAME", config.getExampleName();
            params.put("TESTNAME", testName);
            
            if(theYesNo != null)
                params.put("THEYESNO", theYesNo ? "YES" : "NO"); 
                
            if(minX != null) {// you can check other params also
                params.put("COORDINATES", String.valueOf(minX)+","+String.valueOf(minY)+
                            "',"+String.valueOf(maxX)+","+String.valueOf(maxY));
            }
            
            ExportJob queuedJob = ExportQueue.addJob(params, testId, otherId);
    
    }
        
    private void createExportJob (String testId, Long otherId){
        createExportJob(testId, otherId, null, null, null, null, null);
    }
    
    private void createExportJob (String testId, Long otherId, Boolean theYesNo){
        createExportJob(testId, otherId, theYesNo, null, null, null, null);
    }

如果参数太多,您可以使用另一个包含所有附加参数的映射并对其进行空检查。

于 2021-03-03T13:50:00.880 回答