gpt4 book ai didi

kotlin - 如何将 vararg 作为数组传递给 Kotlin 中的函数?

转载 作者:IT老高 更新时间:2023-10-28 13:46:51 26 4
gpt4 key购买 nike

我想将 vararg 从 buy 函数传递给 drive 函数但我明白了

编译错误:

required Array<T> found Array<out T>

代码:

class Car

fun buy(vararg cars: Car) {
drive(cars) //compile error
}

fun drive(cars: Array<Car>) {
//...
}

最佳答案

准确的错误是:

Type mismatch.
Required: Array<Car>
Found: Array<out Car>

问题是当你有一个 vararg cars: Car 函数参数时,它在函数内部的类型是 Array<out Car> ,它基本上代表了一个只读数组,该数组是函数被调用的参数 - 毕竟,它不会真的是一个很高兴开始修改你得到的参数为 vararg (Kotlin 中的函数参数是只读的 val s,这非常相似)。

但是您的 drive 函数需要一个常规的 Array<Car> ,这当然也是可写的。因此,如果您希望保留这些函数签名,则需要创建一个新数组,其中包含只读数组中的所有内容。这可以使用以下语法创建:

drive(arrayOf(*cars))

这会调用我们通常用来创建数组的 arrayOf 函数,该函数接受一个可变参数,并使用扩展运算符,这是一种将数组元素(carsbuy 函数内部)作为可变参数传递的方法参数(docs here)。

虽然这一切听起来很复杂,但它实际上是一个非常有效的解决方案,因为它只是在字节码的底层使用了 Array.copyOf

关于kotlin - 如何将 vararg 作为数组传递给 Kotlin 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44090019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com