如何在 kotlin 中将全局定义的可空变量用作非空变量

jac*_*ses 1 kotlin

在 kotlin 中编写实现时,我想使用全局定义的非空变量。从功能上讲,这些变量不能为空,但技术实现要求它们可以为空。

我到目前为止使用的解决方案是:

val funtionalValue = if (global.technicalValue != null) global.technicalValue!! else throw someException()
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在functionalValue不使用!!全局定义的技术值的情况下分配?

End*_*eit 7

您可能想要使用一些标准库函数,称为 checkNotNullrequireNotNull

val funtionalValue = checkNotNull(global.technicalValue)
Run Code Online (Sandbox Code Playgroud)

IllegalStateException如果值为 null,这将导致抛出异常。requireNotNull将抛出一个IllegalArgumentException并且更适合验证函数参数和用户输入。

如果你想控制抛出的异常,你也可以使用 elvis 运算符来代替ifand 。!!

val funtionalValue = global.technicalValue ?: throw someException
Run Code Online (Sandbox Code Playgroud)

感谢@Sweeper 指出checkNotNull