【问题标题】:Convert Kotlin Array to Java varargs将 Kotlin 数组转换为 Java 可变参数
【发布时间】: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?

【问题讨论】:

    标签: java kotlin interop kotlin-interop


    【解决方案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 他的意思是:如果我们有字符串的可变参数,并且我们希望传递给一个需要字符串数组的函数呢?
    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多