我在setHeader中有139个开关盒
private static void setHeader(String headertableField, String headerValue) {
switch (headertableField) {
case AUS:
headerDTO.setAudval(StringUtils.getTrimValueAfterNullCheck(headerValue));
break;
case AXL:
headerDTO.setAxlfieldl(StringUtils.getTrimValueAfterNullCheck(headerValue));
break;
................
..................
default:
break;
}
}
它显示声纳问题。您能否提出任何降低复杂性的解决方案?
最佳答案
尤金的答案相当不错,但是您可以更进一步,并在枚举中使用相同的逻辑
enum HeaderField {
AUS(HeaderDTO::setAudval),
AXL(HeaderDTO::setAxlfieldl);
private BiConsumer<HeaderDTO, String> fieldSetter;
HeaderField(BiConsumer<HeaderDTO, String> setter) {
fieldSetter= setter;
}
public void setField(HeaderDTO headerDTO, String value) {
fieldSetter.accept(headerDTO, value);
}
}
然后,您可以使用它:
HeaderField.AUS.setField(headerDTO, "value");
HeaderField.AXL.setField(headerDTO, "axl");