Kotlin 可变参数到数组

问题描述 投票:0回答:1

第三方库中有一个我想调用的函数:

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 参数作为数组传递?

kotlin variadic-functions
1个回答
0
投票

这是因为 vararg 参数的类型为

Array<out String>
,而不是
Array<String>
。另请参阅规格。我认为这是为了防止您修改数组的元素,这几乎总是不正确的。

您可以创建数组的副本,然后将该副本传递给

foo

fun bar(vararg vstrings: String) {
    foo(Array(vstrings.size) { vstrings[it] })
}

在Kotlin/JS中,你可以直接调用

vstrings.copyOf()
,但由于某种原因,这在其他平台上不可用。

© www.soinside.com 2019 - 2024. All rights reserved.