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

如何将vararg作为数组传递给Kotlin中的函数?,kotlin,variadic-functions,Kotlin,Variadic Functions,我想把vararg从buy函数传递到drive函数 但我明白了 编译错误: required Array<T> found Array<out T> 找到所需数组数组 代码: 等级车 趣味购物(vararg汽车:汽车){ drive(cars)//编译错误 } 趣味驾驶(汽车:阵列){ //... } 基本上,在变量名之前需要vararg键 fun args(vararg cars: Car) { //use cars as an array } 精确误差为

我想把vararg从buy函数传递到drive函数 但我明白了

编译错误:

required Array<T> found Array<out T>
找到所需数组数组
代码:

等级车
趣味购物(vararg汽车:汽车){
drive(cars)//编译错误
}
趣味驾驶(汽车:阵列){
//...
}

基本上,在变量名之前需要vararg键

fun args(vararg cars: Car) {
   //use cars as an array 
}
精确误差为:

Type mismatch.
Required: Array<Car>
Found:    Array<out Car>
这将调用我们通常创建数组时使用的
arrayOf
函数,该函数接受一个vararg参数,并使用spread运算符作为vararg参数()传递数组元素(在
buy
函数中,
cars
是其中的一个元素)


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

另一个解决方案是将
drive
更改为
fun drive(Array){…}
。这当然意味着驱动器内的汽车无法修改,但可以避免复制。

fun foo(vararg strings:String):数组{
override fun checkMatch(vararg cards: SetsCard): Int {
    return if (isSet(*cards)) 16 else -2
}

private fun isSet(vararg cards: SetsCard) : Boolean {
    if (cards.size == 3) {
        return true
    }
    return false
}
返回字符串 } //定义一个变量 变量yourVar:Array=foo(“a”、“b”、“c”) //在Java方法` public void javaMethod(String…someParam)(){}中使用var` javaMethod(*yourVar)
即使您想将其添加到第二个函数中,这也无法修复编译错误。我认为另一个答案更为典型,您希望将
数组作为第二个函数的参数,而不是复制。
drive(arrayOf(*cars))
override fun checkMatch(vararg cards: SetsCard): Int {
    return if (isSet(*cards)) 16 else -2
}

private fun isSet(vararg cards: SetsCard) : Boolean {
    if (cards.size == 3) {
        return true
    }
    return false
}
fun foo(vararg strings: String): Array<out String> {
    return strings
}

//  Define a var 
var yourVar: Array<out String> = foo("a", "b", "c")

// Use var in Java method `public void javaMethod(String... someParam)() {}`
javaMethod(*yourVar)