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

如何修改Java枚举以支持直接访问多语言ID属性?

实现枚举常量直接通过.ENGLISH/.TAMIL获取对应ID的方案

你想要的TransliterationKeys.FULL_NAME.ENGLISH这种访问语法完全可以实现,核心思路是给每个枚举实例添加公开的final整数字段,在构造方法中初始化对应ID值即可。下面是兼顾原有transliterationKey字符串的完整实现:

@Getter
public enum TransliterationKeys {
    FULL_NAME("Full Name of the Applicant", 1, 2),
    NAME_TO_BE_INCLUDE_IN_IC("Name to be included IC", 6, 7),
    GENDER("Gender", 4, 5);

    // 保留原有字符串字段
    private final String transliterationKey;
    // 公开的语言ID字段,支持直接访问
    public final int ENGLISH;
    public final int TAMIL;

    TransliterationKeys(String transliterationKey, int englishId, int tamilId) {
        this.transliterationKey = transliterationKey;
        this.ENGLISH = englishId;
        this.TAMIL = tamilId;
    }
}

为什么你的原始设想不可行?

你写的FULL_NAME(ENLIGH(1), TAMIL(2))语法在Java中不合法:枚举的构造参数必须是编译期可确定的合法值,ENLIGH(1)这种写法既不是已定义的类型,也不是有效的方法调用,编译器无法识别。

其他可选方案(如果需要扩展更多语言)

如果后续可能新增更多语言类型,用内部枚举+Map的方式更易扩展,但访问语法会变成方法调用:

@Getter
public enum TransliterationKeys {
    FULL_NAME("Full Name of the Applicant", Map.of(Language.ENGLISH, 1, Language.TAMIL, 2)),
    NAME_TO_BE_INCLUDE_IN_IC("Name to be included IC", Map.of(Language.ENGLISH, 6, Language.TAMIL, 7)),
    GENDER("Gender", Map.of(Language.ENGLISH, 4, Language.TAMIL, 5));

    private final String transliterationKey;
    private final Map<Language, Integer> languageIdMap;

    TransliterationKeys(String transliterationKey, Map<Language, Integer> languageIdMap) {
        this.transliterationKey = transliterationKey;
        this.languageIdMap = languageIdMap;
    }

    public int getLanguageId(Language language) {
        return languageIdMap.getOrDefault(language, -1); // 默认返回-1避免空指针
    }

    // 内部枚举定义语言类型
    public enum Language {
        ENGLISH, TAMIL
    }
}

使用方式:TransliterationKeys.FULL_NAME.getLanguageId(Language.ENGLISH)

总结

如果只需要支持ENGLISH和TAMIL两种语言,第一种直接定义公开字段的方案最简洁,完全符合你想要的访问语法。

内容的提问来源于stack exchange,提问作者ranidu harshana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:05:07