我对Kotlin及其null检查警告有疑问。
假设我创建了一个名为“user”的对象,该对象具有一些属性,如名称,姓氏等。以下代码为示例:
if(user != null) {
val name = user!!.name
val surname = user.surname
val phoneNumber = user.phoneNumber
} else
// Something else
为什么,即使我检查用户不为空,Kotlin仍要我使用!!我第一次打电话给用户?此时不能为空。
我知道我可以使用以下代码段,但我不了解这种行为。
user?.let{
// Block when user is not null
}?:run{
// Block when user is null
}
最佳答案
有这种行为的原因。基本上是因为编译器无法确保在user
检查之后if
的值不为空。
此行为仅适用于var user
,不适用于val user
。例如
val user: User? = null;
if (user != null) {
// user not null
val name = user.name // won't show any errors
}
var user: User? = null;
if (user != null) {
// user might be null
// Since the value can be changed at any point inside the if block (or from another thread).
val name = user.name // will show an error
}
let
甚至可以确保var
变量的不变性。 let
与原始变量分开创建一个新的最终值。var user: User? = null
user?.let {
//it == final non null user
//If you try to access 'user' directly here, it will show error message,
//since only 'it' is assured to be non null, 'user' is still volatile.
val name = it.name // won't show any errors
val surname = user.surname // will show an error
}
关于android - Kotlin空值检查(!!)当已经检查了空性时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56956432/