将 Kotlin 数组转换为 Java 可变参数
Posted
技术标签:
【中文标题】将 Kotlin 数组转换为 Java 可变参数【英文标题】:Convert Kotlin Array to Java varargs 【发布时间】:2018-02-01 22:41:17 【问题描述】:如何将我的 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?
【问题讨论】:
【参考方案1】:扩展运算符用*
表示。
展开运算符放在数组参数的前面:
antMatchers(*angularRoutings)
更多信息,请参阅documentation:
当我们调用
vararg
-函数时,我们可以一个接一个地传递参数,例如asList(1, 2, 3)
,或者,如果我们已经有一个数组并且想要将其内容传递给函数,我们使用扩展运算符(以*
为数组前缀):
请注意,扩展运算符只为数组定义,不能直接用于列表。处理列表时,使用例如toTypedArray()
将其转换为数组:
*list.toTypedArray()
【讨论】:
又如何转换回来? @Iacas “转换回来”是什么意思?vararg
需要单独的元素,*array
是 Kotlin 的说法,即“为此目的将此数组视为单独的元素”。在vararg
函数中,vararg
参数无论如何都是一个数组。要将单个元素转换为数组,您可以使用 arrayOf(...)
,但在这种情况下您不需要它。
请注意,这会带来非常高的性能损失。 sites.google.com/a/athaydes.com/renato-athaydes/posts/…检查可变参数,或medium.com/@BladeCoder/…
有什么方法可以避免使用扩展运算符并将一些数组或列表传递给接受vararg
的方法?
@Darioseidl 他的意思是:如果我们有字符串的可变参数,并且我们希望传递给一个需要字符串数组的函数呢?以上是关于将 Kotlin 数组转换为 Java 可变参数的主要内容,如果未能解决你的问题,请参考以下文章
一文读懂《Effective Java》第42条:慎用可变参数
Kotlin集合操作 ④ ( Set 集合 | 可变 Set 集合 | List 与 Set 之间相互转换 | 数组类型 )
Kotlin集合操作 ④ ( Set 集合 | 可变 Set 集合 | List 与 Set 之间相互转换 | 数组类型 )