首页 > 解决方案 > 调用解构声明初始化程序的“component1()”函数需要不可为空的值

问题描述

是否可以在 Kotlin 中编译以下代码?

val variable: String? = "string"

val (a, b) = variable?.run {
    1 to 2
}  

标签: kotlinnullabledestructuring

解决方案


编译器不允许解构,因为右侧的表达式被键入为 nullable Pair<Int, Int>?,并且不清楚在为 null的情况ab应该获取什么值。variable

要解决这个问题,您需要在=.

有很多不同的方法可以处理可空值并从可空值生成非空值,请参阅:在 Kotlin 中,处理可空值、引用或转换它们的惯用方法是什么

例如,如果您想为aand提供后备值b,则使用?:运算符,如下所示:

val (a, b) = variable?.run {
    1 to 2
} ?: (0 to 0)

例如,另一种方法是先检查variablenull:

val (a, b) = checkNotNull(variable) { "variable should never be null" }.run {
    1 to 2
}

推荐阅读