You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用枚举与泛型消除Java中的重复代码?

优化方案:消除重复代码,提升代码质量

针对枚举结构重复、转换逻辑冗余的问题,可通过抽象公共契约+通用工具方法彻底消除重复,具体步骤如下:

1. 定义公共接口,统一枚举行为

由于两个枚举的属性、方法完全一致,先创建接口统一它们的行为契约:

public interface EstimateOption {
    String getName();
    String getValue();
    String getCode();
}

2. 修改枚举类,实现公共接口

让EstimateTransmissionType和EstimateFuelType都实现上述接口,赋予二者统一的类型标识:

调整后的EstimateTransmissionType

public enum EstimateTransmissionType implements EstimateOption {
    AUTO("오토(A/T)", "A001", "001"),
    MANUAL("수동(M/T)", "A002", "002"),
    ETC("기타", "A999", "999");

    final String name;
    final String value;
    final String code;

    EstimateTransmissionType(String name, String value, String code) {
        this.name = name;
        this.value = value;
        this.code = code;
    }

    @Override
    public String getName() { return name; }
    @Override
    public String getValue() { return value; }
    @Override
    public String getCode() { return code; }
}

调整后的EstimateFuelType

public enum EstimateFuelType implements EstimateOption {
    GASOLINE("가솔린", "A001", "001"),
    DIESEL("디젤", "A002", "002"),
    LPG_GENERAL("LPG(일반인 구입)", "A003", "003"),
    LPG_ALL("LPG", "A004", "004"),
    HYBRID("가솔린+전기", "A005", "005"),
    ELECTRONIC("전기", "A009", "009"),
    ETC("기타", "A999", "999");

    final String name;
    final String value;
    final String code;

    EstimateFuelType(String name, String value, String code) {
        this.name = name;
        this.value = value;
        this.code = code;
    }

    @Override
    public String getName() { return name; }
    @Override
    public String getValue() { return value; }
    @Override
    public String getCode() { return code; }
}

3. 编写通用转换方法,消除重复逻辑

创建通用静态方法,接收任意实现EstimateOption接口的枚举数组,统一处理转换逻辑:

// 可放在工具类或原有业务类中
public static List<Map<String, Object>> convertEstimateOptionsToList(EstimateOption[] options) {
    return Arrays.stream(options)
            .map(option -> {
                Map<String, Object> map = new HashMap<>();
                map.put("code", option.getCode());
                map.put("value", option.getValue());
                map.put("name", option.getName());
                return map;
            })
            .collect(Collectors.toList());
}

4. 简化原有方法

原来的两个方法可简化为一行代码,直接调用通用方法:

public static List<Map<String, Object>> getTransmissionTypeList() {
    return convertEstimateOptionsToList(EstimateTransmissionType.values());
}

public static List<Map<String, Object>> getFuelTypeList() {
    return convertEstimateOptionsToList(EstimateFuelType.values());
}

优化亮点

  • 彻底消除枚举结构与转换逻辑的重复,后续新增同结构枚举时,只需实现接口并调用通用方法即可
  • 用Java 8 Stream API简化循环代码,可读性更强
  • 接口明确契约,代码扩展性与维护性显著提升

内容的提问来源于stack exchange,提问作者Christopher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:20:39