如何将vararg作为数组传递给Kotlin中的函数?
我想把vararg从buy函数传递到drive函数 但我明白了 编译错误:如何将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 } 精确误差为
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)