我正在尝试使用安全调用(?.运算符)从可为空数组中获取项目。
data class myObject(val i: Int)
var arr: Array<myObject>? = arrayOf(myObject(123),myObject(456))
// var arr: Array<myObject>? = arrayOf(myObject(123),null)
println(arr?[1] ?: myObject(1)) // Doesn't work
println(arr?.[1] ?: myObject(1))// Doesn't work
println(arr[1]? ?: myObject(1)) // Doesn't work
//Intended output: myObject(i=456) or myObject(i=1)
我可以说
!!
运算符按预期工作(println(arr!![1])
打印 myObject(i=456)
)
但是如何让安全调用运算符 (
?.
) 使用数组呢?
(回答我自己的问题)
println(arr?.get(1) ?: myObject(1))
[index] 括号只是
get
和 set
方法的简写。 (这里是一些关于 运算符覆盖 的信息。如果您需要使用 ?.
,每个运算符 (例如 a+=b 和 a++)都有相应的函数(a.plusAssign(b) 和 a.inc())使用其中之一,检查 long-from 函数。
正如另一位用户指出的,这个问题是 ? 的重复。可空数组上的运算符