Одна идея, которая приходит мне в голову, заключается в предоставлении логического имени параметрам (при условии, что все они являются строками, как вы указали в вопросе):
Учитывая, что набор параметров известен в компиляциивремя, когда вы можете создать «реестр» параметров:
enum ParamName {
PARAM1, PARAM2, PARAM3... PARAM_N;
}
class ConditionChecker {
private Map<ParamName, Predicate<String>> registry;
public ConditionChecker() {
map.put(ParamName.PARAM1, this::conditionCheck1);
map.put(ParamName.PARAM2, this::conditionCheck2);
// populate the map with all conditions for all possible parameters
}
// knows how to check param1
private Boolean conditionCheck1(String param1) {
...
}
// knows how to check param2
private Boolean conditionCheck2(String param2) {
...
}
...
}
Теперь укажите «общий» метод проверки условий:
class ConditionChecker { // the same class as above, continuing...
public boolean checkAll(Map<ParamName, String value> allParams) {
// for each element in the map call
for(Entry<ParamName, String> entry : allParams.entrySet()) {
if(! registry.get(entry.getKey()).accept(entry.getValue())) {
return false; // at least one check failed
}
}
// all validations passed
return true;
}
}
Теперь в shouldEnableComponent1
, который обладает информацией, котораяпараметры должны быть точно проверены "вы можете сделать что-то вроде этого:
boolean shouldEnableComponent1() {
Map<ParamName, String> paramMap = extractMapForParams(PARAM1, PARAM2, PARAM3);
return conditionChecker.checkAll(paramMap);
}