将 vararg 参数传递给 Kotlin 中的另一个函数时出现编译时错误
Compile time error in passing vararg parameter to another function in Kotlin
我正在尝试接受可变参数作为 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 中尝试相同的代码,它会起作用。
Java:
void a(int... a) {
b(a); // works completely fine
}
void b(int... b) {
}
我该如何解决这个问题?
只需在传递的参数(扩展运算符)前面加上一个 *
,即
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
}
函数a()
中的参数a
的类型为IntArray
,传递给b
时需要再次转换为varargs
。这可以通过 "spread operator" 来完成:*
fun a(vararg a: Int) {
b(*a) // spread operator
}
之前在这里稍微详细地描述过:
我正在尝试接受可变参数作为 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 中尝试相同的代码,它会起作用。
Java:
void a(int... a) {
b(a); // works completely fine
}
void b(int... b) {
}
我该如何解决这个问题?
只需在传递的参数(扩展运算符)前面加上一个 *
,即
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
}
函数a()
中的参数a
的类型为IntArray
,传递给b
时需要再次转换为varargs
。这可以通过 "spread operator" 来完成:*
fun a(vararg a: Int) {
b(*a) // spread operator
}
之前在这里稍微详细地描述过: