【发布时间】:2018-02-18 19:38:17
【问题描述】:
我有一个可变参数函数,它需要多个Ints。我有一个 Array<Int> 想用作输入。
不成功的尝试:
这是我尝试使用Spread Operator 调用该函数:
fun printNumbers(vararg numbers: Int) {
numbers.forEach { it -> println(it) }
}
val numbers: Array<Int> = arrayOf(1, 2, 3)
printNumbers(*numbers)
但是,我收到以下类型不匹配错误:
error: type mismatch: inferred type is Array<Int> but IntArray was expected
printNumbers(*arrayOf<Int>(1, 2, 3))
^
额外的困惑:
我不明白为什么会出现此错误,尤其是因为我可以在 Array<String> 上使用扩展运算符。比如……
fun printStrings(vararg strings: String) {
strings.forEach { it -> println(it) }
}
val strings: Array<String> = arrayOf("hello", "there", "stackoverflow")
printStrings(*strings)
输出:
hello
there
stackoverflow
尝试纠正错误:
我在网上搜索是否可以将
Array<Int>转换为IntArray,因为这可能会满足编译器的要求。除了opposite conversion(IntArray到Array<Int>),我什么都看不到我尝试在调用
arrayOf时指定泛型类型。例如。arrayOf<Int>(1, 2, 3)。这(出于显而易见的原因)不起作用。
注意事项:
我使用的是 Kotlin 1.0.3 版
我认为我的一些困惑源于我不明白
Array<Int>和IntArray之间的区别以及何时选择其中一个。
如何将Array<Int> 传递给需要多个Ints 的可变参数函数?
【问题讨论】:
标签: arrays kotlin groovy-spread