Avatar ·

Kotlin中变量前的星号(*)运算符是什么意思?Spread Operator

你好!我正在学习Kotlin,遇到了一个无法理解的奇怪语法。我看到了这样的代码: ```kotlin val numbers = listOf(1, 2, 3) val moreNumbers = listOf(0, *numbers.toTypedArray(), 4, 5) println(moreNumbers) // [0, 1, 2, 3, 4, 5] ``` `numbers.toTypedArray()` 前面的星号 `*` 是什么意思?我知道Java中有一个类似的运算符用于解包数组,但在Kotlin中我习惯以不同的方式处理列表和数组。 我尝试过不带星号编写类似的代码: ```kotlin val wrong = listOf(0, numbers.toTypedArray(), 4, 5) println(wrong) // [0, [Ljava.lang.Integer;@..., 4, 5] ``` 结果一团糟——列表中放入了数组对象,而不是它的元素。如何正确使用这个运算符?有替代方案吗?为什么在Kotlin这个被认为更现代的语言中还需要这种“古老”的构造? 如果能用示例解释,特别是针对接受vararg的函数的情况,我将不胜感激。 <<>>

什么是