Java枚举存储其他枚举Class字段 实现可调用values方法方案咨询
解决方案
核心思路
你需要做两处调整即可实现需求:
- 明确约束
enumType字段的类型为枚举类的Class对象,编译期保证传入的都是枚举类型 - 用JDK自带的
Enum类提供的getEnumConstants()方法替代你想调用的values()方法(values()是编译器为每个具体枚举类生成的静态方法,无法直接通过Class对象调用,二者效果完全一致)
具体实现步骤
第一步:修改EFormSw枚举定义
调整字段类型和构造方法参数:
public enum EFormSw { OBJ_KEY_LIST("Object Keys", EObjKeyType.class), OBJ_NOTE_LIST("Object Notes", EObjNoteType.class); public final String label; // 约束类型为继承自Enum的类的Class对象 public final Class<? extends Enum<?>> enumType; EFormSw(String label, Class<? extends Enum<?>> enumType) { this.label = label; this.enumType = enumType; } // 可选:封装泛型方法避免每次手动强转 @SuppressWarnings("unchecked") public <T extends Enum<T>> T[] getEnumValues() { return (T[]) enumType.getEnumConstants(); } }
第二步:调用方式
基础调用(不封装方法)
// 强转为对应枚举类的数组即可使用 EObjKeyType[] allKeyTypes = (EObjKeyType[]) EFormSw.OBJ_KEY_LIST.enumType.getEnumConstants(); allKeyTypes.someThingElse();
简化调用(用封装好的泛型方法)
编译器会自动推导类型,无需手动强转:
EObjKeyType[] allKeyTypes = EFormSw.OBJ_KEY_LIST.getEnumValues(); allKeyTypes.someThingElse();
内容的提问来源于stack exchange,提问作者Daniel Methner
相关产品推荐
相关产品推荐

