将vararg参数传递给Kotlin中的另一个函数时发生编译时错误

时间:2018-08-06 08:57:26

标签: java android kotlin kotlin-interop

我试图在Kotlin中接受vararg参数作为函数参数,并尝试将其传递给具有vararg参数的另一个函数。但是,这样做会给我一个编译时错误,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中尝试相同的代码,它会起作用。

Java:

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

void b(int... b) {

}

我该如何解决?

2 个答案:

答案 0 :(得分:2)

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

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 functions reference #varargs

答案 1 :(得分:0)

函数a中的参数a()具有类型IntArray,并且在传递给varargs时需要再次转换为b。可以使用“传播算子”:*

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

在此之前已对其进行了更详细的描述:https://stackoverflow.com/a/45855062/8073652