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"
}
使用 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"
}