Kotlin中的可空变量

我有这个代码示例。

var nullAbleName: String? = null 
var v = "I cannot be null"
//!    v = nullAbleName      // mismatch

nullAbleName = "abc"
v = nullAbleName         // Now OK. 

nullAbleName 是一个变量,它的值应该在运行时确定。“v”的第二次赋值可以的逻辑是什么?是不是我很幸运,因为编译器碰巧知道 nullAbleName 有值?

回答

这称为智能铸造。编译器能够看到局部变量最近被设置为显式字符串,因此它将其视为非空。您可能会注意到,IDE 对分配的颜色/突出显示有所不同,以表明它正在使用智能投射。

这仅适用于尚未被修改它们的闭包捕获的局部变量(例如,创建一个修改局部变量值的回调实例)。因此属性不适合智能转换,因为它们不是局部变量(并且可以在其他地方更改)并且在闭包中捕获的局部变量不符合条件(因为它们可以通过闭包在其他地方更改)。


以上是Kotlin中的可空变量的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>