ChatGPT解决这个技术问题 Extra ChatGPT

将 Kotlin 数组转换为 Java 可变参数

如何将我的 Kotlin Array 转换为可变参数 Java String[]

val angularRoutings = 
    arrayOf<String>("/language", "/home")

// this doesn't work        
web.ignoring().antMatchers(angularRoutings)

How to pass an ArrayList to a varargs method parameter?


s
s1m0nw1

扩展运算符,用 * 表示。
展开运算符放在数组参数的前面:

antMatchers(*angularRoutings)

有关详细信息,请参阅 documentation

当我们调用一个可变参数函数时,我们可以一个接一个地传递参数,例如 asList(1, 2, 3),或者,如果我们已经有一个数组并且想要将它的内容传递给函数,我们使用扩展运算符(以 * 为数组前缀):

请注意,扩展运算符仅针对数组定义,不能直接用于列表。处理列表时,使用 egtoTypedArray() 将其转换为数组:

 *list.toTypedArray()

以及如何转换回来?
@Iacas“转换回来”是什么意思? vararg 需要单独的元素,而 *array 是 Kotlin 表示“为此目的将此数组视为单独元素”的方式。在 vararg 函数中,vararg 参数无论如何都是一个数组。要将单个元素转换为数组,您可以使用 arrayOf(...),但在这种情况下您不需要它。
请注意,这会带来非常高的性能损失。 sites.google.com/a/athaydes.com/renato-athaydes/posts/… 检查可变参数,或 medium.com/@BladeCoder/…
有什么方法可以避免使用扩展运算符并将一些数组或列表传递给接受 vararg 的方法?
@DarioSeidl他的意思是:如果我们有字符串的可变参数,并且我们希望传递给一个需要字符串数组的函数怎么办?