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

Kotlin Data Class 借助Enum枚举实现语言代码映射显示名问题咨询

实现方案

步骤1:修正枚举定义

你当前的枚举属性定义有误,需要拆分语言代码和标准显示名为两个独立属性,同时新增匹配工具方法:

enum class ClosedCaptionLanguages(val code: String, val standardDisplayName: String) {
    ENG("eng", "English"),
    ZHO("zho", "Chinese");

    companion object {
        // 按语言代码忽略大小写匹配枚举条目,适配不同大小写的输入场景
        fun findByCode(code: String): ClosedCaptionLanguages? {
            return values().find { it.code.equals(code, ignoreCase = true) }
        }

        // 若你需要按传入的显示名匹配,可新增此方法
        fun findByDisplayName(displayName: String): ClosedCaptionLanguages? {
            return values().find { it.standardDisplayName.equals(displayName, ignoreCase = true) }
        }
    }
}

步骤2:实现data class逻辑

通过私有原始参数+公开处理后属性的方式,统一处理主/次构造的显示名替换逻辑,避免代码冗余:

data class ClosedCaptionOn(
    val languageCode: String,
    // 私有属性接收原始传入的显示名,不对外暴露
    private val rawLanguageDisplay: String
) : ClosedCaptionOptions() {
    // 对外暴露的最终标准显示名,统一做替换处理
    val languageDisplay: String = findByCode(languageCode)?.standardDisplayName ?: rawLanguageDisplay

    // 次构造仅传语言代码的场景,默认用语言代码作为兜底显示名
    constructor(languageCode: String) : this(languageCode, languageCode)

    companion object {
        // 导入枚举的匹配方法简化调用
        private fun findByCode(code: String) = ClosedCaptionLanguages.findByCode(code)
    }
}

逻辑说明

  • 无论调用主构造传两个参数还是次构造传单个参数,最终返回的languageDisplay都会优先匹配枚举中对应语言代码的标准显示名,没有匹配到的场景才会使用原始传入的显示值。
  • 如果你需求是按传入的显示名匹配而非按语言代码匹配,只需将languageDisplay的赋值逻辑替换为findByDisplayName(rawLanguageDisplay)?.standardDisplayName ?: rawLanguageDisplay即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:18:03