【问题标题】:iterate enum internal values in kotlin在kotlin中迭代枚举内部值
【发布时间】:2019-09-20 05:59:13
【问题描述】:

我知道有一个 similar question 。 对我来说,枚举如下:

enum class Gender (val s:String) {
    Female("female"),
    Male("male")
}

如何迭代 Gender 枚举并获得“女性”或“男性”?

【问题讨论】:

  • val list = Gender.values().map { it.s }

标签: android kotlin enums


【解决方案1】:

这是一个简单的例子。有几种方法可以迭代值,但它们与迭代任何 Array 相同。

fun main() {
    for (gender in Gender.values()) {
        println(gender.s)
    }
}

enum class Gender(val s: String) {
    Female("female"),
    Male("male")
}

对于敏锐的眼睛,在 Gender 类声明中创建的 's' 变量也将成为迭代 Gender 值时要访问的变量。这里令人困惑的一点是,您将“女性”视为键,而将“女性”视为该键的值。然而,枚举将自身中的每种类型都列为值。

【讨论】:

    【解决方案2】:

    Android 特定,因为它在您的标签中提到:Proguard 无法优化这种情况(或至少 it couldn't in 2018),所以最好这样做:

    enum class Gender {
        Female,
        Male
    }
    
    val Gender.s get() = when(this) {
        Female -> "female"
        Male -> "male"
    }
    

    然后使用@Slaw 的评论或@Asgeir 的答案,它们将与您的初始代码一样工作。

    【讨论】:

      【解决方案3】:

      使用最新版本的枚举

      @StringDef(Female, Male)
      @Retention(AnnotationRetention.SOURCE)
      annotation class Gender {
          companion object {
              const val Female = "female"
              const val Male = "male"
          }
      }
      

      更多information

      猜你喜欢
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2017-05-12
      • 2014-06-09
      • 1970-01-01
      相关资源
      最近更新 更多