【问题标题】:Ellipsis operator Java equivalence in KotlinKotlin 中的省略号运算符 Java 等效性
【发布时间】:2018-04-24 08:16:17
【问题描述】:

在 Java 中,可以这样做:void function(Url... urls)。可以使用 1..n 个 url。问题是是否可以用 Kotlin 做同样的事情。

【问题讨论】:

标签: java kotlin variadic-functions ellipsis


【解决方案1】:

解决方案是使用vararg,并且可以迭代参数。

private fun areValidFields(vararg fields: String) : Boolean{
    return fields.none { it.isNullOrEmpty() || it.isBlank() }
}

【讨论】:

    【解决方案2】:

    来自 Kotlin 参考资料 (https://kotlinlang.org/docs/reference/functions.html):

    可变数量的参数 (Varargs)

    函数的参数(通常是最后一个)可以用 可变参数修饰符:

    fun <T> asList(vararg ts: T): List<T> {
        val result = ArrayList<T>()
        for (t in ts) // ts is an Array
            result.add(t)
        return result
    }
    

    允许将可变数量的参数传递给函数:

    val list = asList(1, 2, 3)
    

    在函数内部,T 类型的可变参数参数作为数组可见 的 T,即上例中的 ts 变量的类型为 Array。

    注意与 Java 的区别:在 Java 中,您可以将数组作为单个参数传递,而在 Kotlin 中,您必须显式解包数组,以便每个 数组元素成为一个单独的参数。但是您可以通过简单地将 * 字符放在相应的参数之前来做到这一点:

    fun main(args: Array<String>) {
        val list = listOf("args: ", *args)
        println(list)
    }
    

    (看看它如何让您在一次调用中组合来自数组的值和一些固定值,这在 Java 中是不允许的)。

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 2020-08-28
      • 2013-07-25
      相关资源
      最近更新 更多