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

Java枚举存储其他枚举Class字段 实现可调用values方法方案咨询

解决方案

核心思路

你需要做两处调整即可实现需求:

  1. 明确约束enumType字段的类型为枚举类的Class对象,编译期保证传入的都是枚举类型
  2. 用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:06:09