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的函数的情况,我将不胜感激。
<<>>