Java如何无需编写全量case实现按汽车厂商匹配对应车型枚举
实现方案
你可以直接在CarManufacturer枚举的构造方法中绑定对应车型枚举的Class对象,完全不需要写switch分支,后续新增厂商只需要加枚举项、对应绑定车型枚举即可,无需修改逻辑代码。
首先定义所有车型枚举的公共接口,统一返回类型:
public interface CarModel { String getModelName(); }
各厂商的车型枚举实现该接口:
public enum ModelsBMW implements CarModel { M1("M1"), X3("X3"); // 更多BMW车型 private final String modelName; ModelsBMW(String modelName) { this.modelName = modelName; } @Override public String getModelName() { return modelName; } } public enum ModelsAudi implements CarModel { A4L("A4L"), Q5L("Q5L"); // 更多Audi车型 private final String modelName; ModelsAudi(String modelName) { this.modelName = modelName; } @Override public String getModelName() { return modelName; } }
修改CarManufacturer枚举,构造时直接绑定对应车型枚举类:
public enum CarManufacturer { // 枚举项直接绑定对应车型枚举的Class BMW(ModelsBMW.class), Audi(ModelsAudi.class); private final Class<? extends CarModel> modelEnumClass; CarManufacturer(Class<? extends CarModel> modelEnumClass) { this.modelEnumClass = modelEnumClass; } // 返回当前厂商对应的所有车型枚举列表 public CarModel[] getModels() { return modelEnumClass.getEnumConstants(); } // 可按需扩展根据名称获取对应车型的方法 public CarModel getModelByName(String modelName) { for (CarModel model : getModels()) { if (model.getModelName().equals(modelName)) { return model; } } return null; } }
方案优势
- 后续新增厂商无需修改现有逻辑,仅需两步操作:
- 新增对应厂商的车型枚举,实现
CarModel接口 - 在
CarManufacturer中新增枚举项,绑定对应车型枚举类即可
- 新增对应厂商的车型枚举,实现
- 无硬编码字符串匹配,不存在switch漏写分支的问题
- 类型安全,所有车型都统一实现公共接口,上层调用无需关心不同厂商的枚举差异
内容的提问来源于stack exchange,提问作者1001010101
相关产品推荐
相关产品推荐

