4

我试图接受一个可变参数作为 Kotlin 中的函数参数,并尝试将它传递给另一个带有可变参数的函数。但是,这样做会给我一个编译时错误,type mismatch: inferred type is IntArray but Int was expected.

科特林:

fun a(vararg a: Int){
   b(a) // type mismatch inferred type is IntArray but Int was expected
}

fun b(vararg b: Int){

}

但是,如果我在 Java 中尝试相同的代码,它就可以工作。

爪哇:

void a(int... a) {
    b(a); // works completely fine
}

void b(int... b) {

}

我怎样才能解决这个问题?

4

2 回答 2

4

只需*在您传递的参数(扩展运算符)前面放一个,即

fun a(vararg a: Int){
  // a actually now is of type IntArray
  b(*a) // this will ensure that it can be passed to a vararg method again
}

另请参阅:Kotlin 函数参考 #varargs

于 2018-08-06T08:59:16.347 回答
0

a函数内部的参数是a()有类型的,传递给时IntArray需要再次转换为。这可以使用“扩展运算符”来完成:varargsb*

fun a(vararg a: Int) {
    b(*a) // spread operator
}

之前在这里进行了更详细的描述:https ://stackoverflow.com/a/45855062/8073652

于 2018-08-06T09:01:49.747 回答