检查是否为空并做一些事情
check if null and do something
我是 Kotlin 的新手,我正在尝试弄清楚如果变量为 null 时如何做某事。这就是我想要做的
private var loggedInUser: User? = null
fun createActivity(activity: Activity) {
loggedInUser?.activities?.put(activity.id, activity)
//set loggedInUser.activities = hashMapOf() if null
}
这是用户 class
data class User(
val firstname: String = "",
val lastname: String = "",
val email: String = "",
val password: String = "",
val id: String = UUID.randomUUID().toString(),
val activities: MutableMap<String, Activity> = hashMapOf())
根据您对 User
class 的定义,如果未提供 activities
参数的值,它将使用默认值。由于 hashMapOf()
永远不会 return null,因此您不必担心这一点。此外,activities
是一个 val
而不是可空类型,所以如果你有一个非空的 User
,你就有一个非空的 activities
.
如果您希望在结果为空时设置一些值,请查看 Elvis Operator:
data class User(val name: String, val friend: User? = null)
fun main() {
val x: User? = User("X")
val y: User? = User("Y", x)
val friendOfFriend = y?.friend?.friend?.name ?: "No friend"
println(friendOfFriend) // Outputs "No friend" because x.friend was null
}
如果该调用链中的任何值是 null
,它将使用 ?:
之后提供的值,否则它 return 是左侧给出的值。
当然,这只是最惯用的方式。你也可以这样做:
if (activities == null) {
// something
}
或任何其他传统空值检查。
我是 Kotlin 的新手,我正在尝试弄清楚如果变量为 null 时如何做某事。这就是我想要做的
private var loggedInUser: User? = null
fun createActivity(activity: Activity) {
loggedInUser?.activities?.put(activity.id, activity)
//set loggedInUser.activities = hashMapOf() if null
}
这是用户 class
data class User(
val firstname: String = "",
val lastname: String = "",
val email: String = "",
val password: String = "",
val id: String = UUID.randomUUID().toString(),
val activities: MutableMap<String, Activity> = hashMapOf())
根据您对 User
class 的定义,如果未提供 activities
参数的值,它将使用默认值。由于 hashMapOf()
永远不会 return null,因此您不必担心这一点。此外,activities
是一个 val
而不是可空类型,所以如果你有一个非空的 User
,你就有一个非空的 activities
.
如果您希望在结果为空时设置一些值,请查看 Elvis Operator:
data class User(val name: String, val friend: User? = null)
fun main() {
val x: User? = User("X")
val y: User? = User("Y", x)
val friendOfFriend = y?.friend?.friend?.name ?: "No friend"
println(friendOfFriend) // Outputs "No friend" because x.friend was null
}
如果该调用链中的任何值是 null
,它将使用 ?:
之后提供的值,否则它 return 是左侧给出的值。
当然,这只是最惯用的方式。你也可以这样做:
if (activities == null) {
// something
}
或任何其他传统空值检查。