如何利用枚举与泛型消除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
相关产品推荐
相关产品推荐

