问题描述
在Kotlin代码中,常常能看到代码形如:
val userId = ctx.session?.userId ?: throw BizException("no_session_user_for_db_policy")
其中的?.
和 ?:
运算符究竟是什么意思呢?
解答
第一个问号不难理解,就是在对于某个可能为空的量的一个判断。定义变量时,可在类型后面加一个问号?,表示该变量是Nullable,不加表示该变量不可为null。
关于示如果它的左侧是null值,则返回右侧,作为后退。否则它只返回左侧的值。
a ?: b只是if (a != null) a else b的简写。
更多类似代码块:
val x: String? ="foo"
val y: String = x ?:"bar" //"foo", because x was non-null
val a: String? = null
val b: String = a ?:"bar" //"bar", because a was null