带前缀的星号是什么意思

时间:2019-09-03 15:41:48

标签: kotlin

我遇到了以下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前面的星号*是什么意思?

1 个答案:

答案 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]