Kotlin val初始化时使用

Lpp*_*Edd 7 final field initialization kotlin

使用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;
}
Run Code Online (Sandbox Code Playgroud)

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

val finalValue: String

when (condition) {
   1 -> finalValue = "One"
   2 -> finalValue = "Two"
   3 -> finalValue = "Three"
   else -> finalValue = "Undefined"
}
Run Code Online (Sandbox Code Playgroud)

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

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

有没有更好的方法来实现这一目标?

azi*_*ian 15

这个结构怎么样:


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

使用when作为表达.

  • `:String`在这种情况下是可选的.;) (3认同)