You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:39:59