我在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");

10-02 11:22