省略号运算符在Kotlin中的Java等价性

在Java中,可以这样做: void function(Url... urls) 。 这使得使用1..n网址成为可能。 问题是Kotlin能否做同样的事情。

从Kotlin参考( https://kotlinlang.org/docs/reference/functions.html ):

可变数量的参数(可变参数)

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

 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变量有类型数组。

要小心与Java的区别:在Java中,您可以将数组作为单个参数传递,而在Kotlin中,您必须显式地解包数组,以便每个数组元素都成为一个单独的参数。 但是你可以通过简单地将*字符放在相应的参数前面来完成:

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

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

解决方法是用vararg参数,可以迭代参数。

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