如何使用数组进行空安全调用(?.运算符)?

问题描述 投票:0回答:1

我正在尝试使用安全调用(?.运算符)从可为空数组中获取项目

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)

但是如何让安全调用运算符 (

?.
) 使用数组呢?

kotlin null nullable kotlin-null-safety
1个回答
1
投票

(回答我自己的问题)

println(arr?.get(1) ?: myObject(1))

[index] 括号只是

get
set
方法的简写。 (这里是一些关于 运算符覆盖 的信息。如果您需要使用 ?.,每个运算符
(例如 a+=b 和 a++)
都有相应的函数(a.plusAssign(b) 和 a.inc())使用其中之一,检查 long-from 函数。

正如另一位用户指出的,这个问题是 ? 的重复。可空数组上的运算符

© www.soinside.com 2019 - 2024. All rights reserved.