我遇到了以下Kotlin代码:
single(name = walletOkHttpTag) {
createOkHttpClient {
addHeaders(
*mutableListOf<Pair<String, String>>().apply {
add(HeaderKey.ACCEPT to APPLICATION_JSON_HEADER)
if (isDebug || isBeta) {
add(HeaderKey.AUTHORIZATION to BASIC_AUTH_WALLET_STAGE_HEADER)
}
}.toTypedArray()
)
}
}
在mutableListOf前面的星号*是什么意思?
答案 0 :(得分:3)
这是 spread 运算符,需要将现有数组传递给vararg
函数。
当我们调用
vararg
函数时,我们可以一个接一个地传递参数,例如asList(1, 2, 3)
,或者,如果我们已经有一个数组并将其内容传递给该函数,则可以使用 spread 运算符(在数组前面加上*
):>
documentation中的简化示例:
val a = arrayOf(1, 2, 3)
val list = listOf(-1, 0, *a, 4)
println(list)
输出:
[-1, 0, 1, 2, 3, 4]
如果没有散布运算符,则数组本身将作为单个元素添加,从而导致List<Serializable>
具有4个元素:
[-1, 0, [Ljava.lang.Integer;@31befd9f, 4]