第三方库中有一个我想调用的函数:
fun foo(strings: Array<String>)
数组
strings
仅用于读取,即foo
不写入。
现在,我想编写一个自己的函数,如下所示:
fun bar(vararg vstrings: String) {
do some things...
foo(vstrings)
do some more things...
}
但是
foo(vstrings)
调用会导致编译错误:argument type mismatch: actual type is 'Array<CapturedType(out String)>', but 'Array<String>' was expected.
我无法更改
foo
的签名。如何将此 vararg 参数作为数组传递?
这是因为 vararg 参数的类型为
Array<out String>
,而不是 Array<String>
。另请参阅规格。我认为这是为了防止您修改数组的元素,这几乎总是不正确的。
您可以创建数组的副本,然后将该副本传递给
foo
。
fun bar(vararg vstrings: String) {
foo(Array(vstrings.size) { vstrings[it] })
}
在Kotlin/JS中,你可以直接调用
vstrings.copyOf()
,但由于某种原因,这在其他平台上不可用。