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

如何修复枚举类伴生对象函数,按Locale返回Map对应列表?

修复ReservationFrequencies枚举的getReservationFrequencies函数

先梳理原代码里的核心问题:

  • 伴生函数里reservationFrequencies是未定义变量,实际上枚举只有APPLICATION这一个实例,应该直接用它的frequencies映射表
  • 强制用locale!!拆包会触发空指针异常,必须处理locale为null的情况
  • 错误调用ReservationFrequency.add,且构造参数传递完全错误——it.frequencies是Map类型,和ReservationFrequency的构造参数不匹配
  • 匹配逻辑错误:试图用ReservationFrequency的name去匹配locale,完全不符合需求,我们需要把传入的locale字符串转成Language枚举,再去映射表里取值

下面是修复后的完整代码:

enum class Language { en, ar }

data class ReservationFrequency(val code: Int, val label: String, val value: Int)

enum class ReservationFrequencies(val frequencies: Map<Language, List<ReservationFrequency>>)  {
    APPLICATION(mapOf(
            Language.en to listOf(
                    ReservationFrequency(0,"once",0),
                    ReservationFrequency(1,"Monthly",2),
                    ReservationFrequency(2,"Quarterly",5),
                    ReservationFrequency(3,"Semi-annually",5),
                    ReservationFrequency(4,"Annually",5)
            ),
            Language.ar to listOf(
                    ReservationFrequency(0,"مرة واحده",0),
                    ReservationFrequency(1,"شهرياً",2),
                    ReservationFrequency(2,"ربع سنوياً",5),
                    ReservationFrequency(3,"نصف سنوياً",5),
                    ReservationFrequency(4," سنوياً",5)
            )
    ));

    companion object {
        fun getReservationFrequencies(locale: String?) : List<ReservationFrequency> {
            // 处理null/空字符串,默认返回英文列表
            val targetLang = locale?.trim()?.lowercase()?.let { langStr ->
                Language.values().firstOrNull { it.name.lowercase() == langStr }
            } ?: Language.en

            // 从映射表取对应列表,找不到则返回空列表(也可改成返回默认英文)
            return APPLICATION.frequencies[targetLang] ?: emptyList()
        }
    }
}

关键修复点说明:

  • 补全了Language枚举和ReservationFrequency数据类的定义(原代码应有这些结构,补全后代码可直接运行)
  • 用locale?.trim()?.lowercase()统一处理输入的locale字符串,避免大小写或空格导致匹配失败
  • 通过Language.values().firstOrNull将字符串转成Language枚举实例,兼容找不到对应语言的场景
  • 直接从APPLICATION.frequencies映射表取值,逻辑简洁直接
  • 处理了locale为null的场景,默认返回英文列表,可根据需求调整为返回空列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:01:44