Kotlin val 初始化使用 when

Kotlin val initialization using when

使用 Java 我可能想使用 switch 语句初始化最终变量:

final String finalValue;

switch (condition) {
   case 1:
      finalValue = "One";
      break;
   case 2:
      finalValue = "Two";
      break;
   case 3:
      finalValue = "Three";
      break;
   default:
      finalValue = "Undefined";
      break;
}

在 Kotlin 中,尝试做同样的事情:

val finalValue: String

when (condition) {
   1 -> finalValue = "One"
   2 -> finalValue = "Two"
   3 -> finalValue = "Three"
   else -> finalValue = "Undefined"
}

导致编译错误。
一个解决方案是使用 by lazy 组合,但这会创建一个新的 Lazy 实例。

val finalValue: String by lazy {    
   when (condition) {
      1 -> "One"
      2 -> "Two"
      3 -> "Three"
      else -> "Undefined"
   }
}

有没有更好的方法来完成这个?

这个构造怎么样:


    val finalValue: String = when (condition) {
        1 -> "One"
        2 -> "Two"
        3 -> "Three"
        else -> "Undefined"
    }

使用 when 作为表达式。

您也可以使用 init 块来初始化最终变量。

val finalValue: String

init {
    finalValue = when (condition) {
        1 -> "One"
        2 -> "Two"
        3 -> "Three"
        else -> "Undefined"
    }
}

其实下面是编译通过的,不知道你遇到的是哪个问题?

fun x(condition: Int = 5) {
    val finalValue: String

    when (condition) {
        1 -> finalValue = "One"
        2 -> finalValue = "Two"
        3 -> finalValue = "Three"
        else -> finalValue = "Undefined"
    }
}

我唯一的可能是:你直接把when子句写到class正文里,肯定不行。不过,您可以将其放入 init 块中。

当然,在这里简单地使用 when 表达式的力量会更好(IDE 也建议这样做):

val finalValue = when (condition) {
    1 -> "One"
    2 -> "Two"
    3 -> "Three"
    else -> "Undefined"
}