如何创建层级枚举类?以汽车品牌-车型-配置为例
三级层级枚举类实现方案
核心思路
通过从下到上的枚举定义逻辑:先定义最底层的Trim枚举,再让中层Model枚举关联对应配置集合,顶层Car枚举关联对应车型集合。利用枚举构造函数固化层级关系,同时提供方法获取下一级枚举列表,保证层级关联的强约束。
代码实现(Java示例)
1. 定义最底层的Trim枚举
public enum Trim { EX, HYBRID, SPORT }
2. 定义关联Trim的Model枚举
每个车型枚举实例在构造时传入对应的配置列表,并提供获取配置的方法:
import java.util.List; public enum Model { CIVIC(List.of(Trim.EX, Trim.HYBRID)), CAMRY(List.of(Trim.SPORT)); private final List<Trim> trims; Model(List<Trim> trims) { this.trims = trims; } public List<Trim> getTrims() { return trims; } }
3. 定义关联Model的Car枚举
每个品牌枚举实例在构造时传入对应的车型列表,并提供获取车型的方法:
import java.util.List; public enum Car { HONDA(List.of(Model.CIVIC)), TOYOTA(List.of(Model.CAMRY)); private final List<Model> models; Car(List<Model> models) { this.models = models; } public List<Model> getModels() { return models; } }
使用示例
通过层级调用可完整遍历整个结构:
public class Main { public static void main(String[] args) { // 遍历本田的所有车型及配置 for (Model model : Car.HONDA.getModels()) { System.out.println("本田车型: " + model.name()); for (Trim trim : model.getTrims()) { System.out.println(" 配置: " + trim.name()); } } // 遍历丰田的所有车型及配置 for (Model model : Car.TOYOTA.getModels()) { System.out.println("丰田车型: " + model.name()); for (Trim trim : model.getTrims()) { System.out.println(" 配置: " + trim.name()); } } } }
额外说明
- 该实现保证了层级的强约束,所有关联关系在枚举初始化时固化,避免出现品牌、车型、配置的非法组合
- 若需要双向关联(比如通过车型反查所属品牌),可在
Model枚举中添加Car类型属性,构造时传入对应品牌,并在Car枚举中验证关联一致性 - 枚举本身不可变,若需动态调整层级关系,建议改用类+静态常量的方式实现,但会失去枚举的类型安全特性
内容的提问来源于stack exchange,提问作者Wes
相关产品推荐
相关产品推荐

