Kotlin范围界定功能-不使用“ it”或“ this”是否有副作用?

时间:2019-10-03 19:08:25

标签: kotlin lambda syntax

基本上这有什么区别

obj?.let{ doSomethingWith(it) }

这吗?

obj?.let{ doSomethingWith(obj) }

显然,仅通过阅读Kotlin文档,首选第一个,但是我发现了类似于第二个的代码,而我的IDE对此并不抱怨。有什么需要注意的“陷阱”,即使我没有被迫这么做,我也应该始终使用“ it”和“ this”吗?

1 个答案:

答案 0 :(得分:4)

实际上,这与范围函数没有太大关系,而与null安全性更多。

如果objobject不是一个好名字,因为它是Kotlin中的关键字)是一个值,则此代码将产生不必要的智能转换:

val obj: String? = null

obj?.let {
    doSomethingWith(obj) // Smart cast to kotlin.String
}

obj是一个变量的情况下,正如注释中正确指出的那样,情况变得更糟,因为此代码可能不再是线程安全的。

这是安全的,但是:

obj?.let { 
    doSomethingWith(it) 
}

由于it是一个值,因此是不可变的。