将 Kotlin 数组转换为 Java 可变参数(varargs)

283
1个回答

553

有一个被表示为*展开运算符
该展开运算符位于数组参数之前:

antMatchers(*angularRoutings)

欲了解更多信息,请参阅文档

当我们调用一个 vararg 函数时,可以逐个传递参数,例如 asList(1, 2, 3)。如果已经有一个数组并希望将其内容传递给函数,则使用扩展操作符(在数组前加上 *):

请注意,扩展操作符仅适用于数组,并且不能直接在列表上使用。处理列表时,请使用例如 toTypedArray() 将其转换为数组:

 *list.toTypedArray()

如何进行转换回去? - lacas
1
@Iacas,“convert back”是什么意思?vararg期望单独的元素,而*array是Kotlin中表示“将此数组视为单独元素”的方式。在vararg函数内部,vararg参数将始终是一个数组。要将单个元素转换为数组,可以使用arrayOf(...),但在这种情况下不需要。 - Dario Seidl
11
请注意,这会导致性能极大的惩罚。请查看Varargs或https://medium.com/@BladeCoder/exploring-kotlins-hidden-costs-part-2-324a4a50b70#da53来了解更多信息。 - svkaka
2
有没有办法避免使用扩展运算符并将一些数组或列表传递给接受 vararg 的方法? - Wackaloon
@DarioSeidl的意思是:如果我们有一个字符串的可变参数,并且我们希望传递给一个期望字符串数组的函数,该怎么办? - android developer
@SimonNinon 是正确的,someVarargMethod(*myList.toTypedArray()) 可以正常工作。 - Williaan Lopes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接