我想在第三方库中调用一个函数:
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
。在Kotlin/JS中,可以
vstrings.copyOf()
直接调用,但是由于某种原因,其他平台无法使用。