在Kotlin中,如果我们将一个类成员声明为var和可为空的类型,编译器不允许我们运行该成员函数,尽管我们在调用该函数之前放置了一个 if 语句,因为编译器不能保证该成员不是在检查 null 之后和调用方法之前设置为 null。 但是如果我们使用安全调用编译器会批准我们的代码。我的问题,编译器如何使安全调用原子化?不是第二个线程可以在检查 null 和调用方法(示例中的吃方法)之间更改变量吗?第一种情况的代码:
class MyWolf
{
var w : Wolf? = Wolf()
fun myFunction()
{
if (w != null)
{
w.eat()
}
}
}
class Wolf
{
fun eat() : Unit
println("wolf is eating")
}
第二种情况的代码:
class MyWolf
{
var w : Wolf? = Wolf()
fun myFunction()
{
w?.eat()
}
}
class Wolf
{
fun eat():Unit
{
//code
}
}