如何在Kotlin数组中使用空安全调用(?.操作符)?
解决Kotlin可空数组的安全元素获取问题
要在可空数组上使用安全调用获取元素,你需要通过get()方法配合安全调用操作符,Kotlin不支持arr?.[1]这类语法写法,正确的实现方式如下:
场景1:数组可空,但元素是非空类型
data class myObject(val i: Int) var arr: Array<myObject>? = arrayOf(myObject(123), myObject(456)) // var arr: Array<myObject>? = null // 测试数组为null的情况 // 正确写法:先安全调用数组,再获取对应索引的元素,Elvis运算符兜底默认值 println(arr?.get(1) ?: myObject(1))
当arr不为null时,输出myObject(i=456);当arr为null时,输出默认值myObject(i=1)。
场景2:数组可空,元素也是可空类型
对应你注释里的数组包含null元素的情况,写法类似,Elvis运算符会同时处理数组为null或元素为null的情况:
var arr: Array<myObject?>? = arrayOf(myObject(123), null) println(arr?.get(1) ?: myObject(1)) // 输出myObject(i=1),因为索引1的元素是null
为什么你的写法不生效?
arr?[1]和arr?.[1]属于语法错误,Kotlin不支持这种索引运算符与安全调用的组合写法,必须显式调用get()方法。arr[1]?会直接编译报错,因为arr是可空数组,直接使用arr[1]未做非空校验,编译器不允许。
内容的提问来源于stack exchange,提问作者vector001
相关产品推荐
相关产品推荐

