У меня есть эти 3 функции, упомянутые ниже, единственная разница в этих функциях - это разные хэш-карты, могу ли я сделать ее одной функцией, и из redefineHeaderParameters я получил имя хэш-карты и динамически поставил ключ-значение
public void redefineHeaderParameters(String condition, String parameterName) {
if (condition.equalsIgnoreCase("invalid")) {
headerParameters.put(parameterName, RandomStringUtils.randomAlphabetic(6));
} else if (condition.equalsIgnoreCase("incorrect")) {
headerParameters.put(parameterName, correctParameter.get(parameterName).replaceAll(
correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));
} else if (condition.equalsIgnoreCase("null")) {
headerParameters.put(parameterName, null);
} else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
headerParameters.put(parameterName, expiredParameter.get(parameterName));
}
}
public void redefineQueryParameters(String condition, String parameterName) {
if (condition.equalsIgnoreCase("invalid")) {
queryParameters.put(parameterName, RandomStringUtils.randomAlphabetic(6));
} else if (condition.equalsIgnoreCase("incorrect")) {
queryParameters.put(parameterName, correctParameter.get(parameterName).replaceAll(
correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));
} else if (condition.equalsIgnoreCase("null")) {
queryParameters.put(parameterName, null);
System.out.println(queryParameters);
} else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
queryParameters.put(parameterName, expiredParameter.get(parameterName));
}
}
public void redefineBodyParameters(String condition, String parameterName) {
if (condition.equalsIgnoreCase("invalid")) {
bodyParameters.put(parameterName, RandomStringUtils.randomAlphabetic(6));
} else if (condition.equalsIgnoreCase("incorrect")) {
bodyParameters.put(parameterName, correctParameter.get(parameterName).replaceAll(
correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));
} else if (condition.equalsIgnoreCase("null")) {
bodyParameters.put(parameterName, null);
} else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
bodyParameters.put(parameterName, expiredParameter.get(parameterName));
}
}
Как упоминалось в комментарии tgdavies, вы можете передать карту методу:
public void redefineParameters(HashMap<String, String> map, String condition, String parameterName) {
if (condition.equalsIgnoreCase("invalid")) {
map.put(parameterName, RandomStringUtils.randomAlphabetic(6));
} else if (condition.equalsIgnoreCase("incorrect")) {
map.put(parameterName, correctParameter.get(parameterName).replaceAll(
correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));
} else if (condition.equalsIgnoreCase("null")) {
map.put(parameterName, null);
} else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
map.put(parameterName, expiredParameter.get(parameterName));
}
}
Или сделайте общий метод закрытым и назовите обертки:
public void redefineHeaderParameters(String condition, String parameterName) {
redefineParameters(headerParameters, condition, parameterName);
}
public void redefineQueryParameters(String condition, String parameterName) {
redefineParameters(queryParameters, condition, parameterName);
}
public void redefineBodyParameters(String condition, String parameterName) {
redefineParameters(bodyParameters, condition, parameterName);
}
private void redefineParameters(Map<String, String> map, String condition, String parameterName) {
if (condition.equalsIgnoreCase("invalid")) {
map.put(parameterName, RandomStringUtils.randomAlphabetic(6));
} else if (condition.equalsIgnoreCase("incorrect")) {
map.put(parameterName, correctParameter.get(parameterName).replaceAll(
correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));
} else if (condition.equalsIgnoreCase("null")) {
map.put(parameterName, null);
} else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
map.put(parameterName, expiredParameter.get(parameterName));
}
}
Другая альтернатива, если карты не находятся в области действия вызывающей стороны, состоит в том, чтобы передать другой параметр, чтобы указать, какой это тип параметра:
public enum ParameterType { HEADER, QUERY, BODY };
public void redefineParameters(ParameterType parameterType, String condition, String parameterName) {
Map<String, String> map;
switch (parameterType) {
case HEADER:
map = headerParameters;
break;
case QUERY:
map = queryParameters;
break;
case BODY:
map = bodyParameters;
break;
}
if (condition.equalsIgnoreCase("invalid")) {
map.put(parameterName, RandomStringUtils.randomAlphabetic(6));
} else if (condition.equalsIgnoreCase("incorrect")) {
map.put(parameterName, correctParameter.get(parameterName).replaceAll(
correctParameter.get(parameterName).substring(2, 7), RandomStringUtils.randomAlphabetic(5)));
} else if (condition.equalsIgnoreCase("null")) {
map.put(parameterName, null);
} else if (condition.equalsIgnoreCase("expired") || condition.equalsIgnoreCase("expire")) {
map.put(parameterName, expiredParameter.get(parameterName));
}
}
Да, просто используйте одну функцию и добавьте HashMap в качестве другого параметра.