Kotlin中的【 ? ,?. ,?: ,!! ,filterNotNull 】含义解释

【?  可空类型,表示当前是否对象可以为空】

在 Kotlin 中,类型系统区分一个引用可以容纳 null{: .keyword } (可空引用)还是不能容纳(非空引用)。
例如,String 类型的常规变量不能容纳 null{: .keyword }

var a: String = "abc"
a = null // 编译错误

如果我们定义的变量是一个可以为空的类型,则要用String?

var b: String? = "abc"
b = null // 编译通过

【?.  安全调用操作符】

如果我们要获取字符串b的长度,则调用b.length,这时候编译器会报错

val l = b.length // 错误:变量“b”可能为空
val l = b?.length//ok,如果 b 非空,就返回 b.length,否则返回 null,{: .keyword },这个表达式的类型是 Int?。

【?:  Elvis 操作符】

对于上面的例子,在开发中我们经常的操作是,当b不为空时,我们返回另一个值y,当b为空时,我们返回一个值x,而不是null,这样就用到Elvis操作符

val l = b?.length?:-1//当b不为空时,返回b.length,当b为空时,返回-1

【!!  操作符,表示当前对象不为空的情况下执行,为空就抛出异常】

比如,如果我传的b为空,我希望系统直接给我抛出个空指针异常,就会用到!!操作符

val l = b!!.length//如果b不为空,则返回b.length,如果b为空,则抛出异常NullPointerException

【filterNotNull】

如果你有一个可空类型元素的集合,并且想要过滤非空元素,你可以使用 filterNotNull 来实现。

val nullableList: List<Int?> = listOf(1, 2, null, 4)
val intList: List<Int> = nullableList.filterNotNull()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值