Operador elipsis Equivalencia Java en Kotlin

En Java, es posible hacer algo como esto: void function(Url... urls) . Hace posible usar 1..n urls. La pregunta es si es posible hacer lo mismo con Kotlin.

De la reference de Kotlin ( https://kotlinlang.org/docs/reference/functions.html ):

Número variable de arguments (Varargs)

Un parámetro de una function (normalmente el último) puede marcarse con el modificador vararg:

 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 } 

permitiendo pasar una cantidad variable de arguments a la function:

 val list = asList(1, 2, 3) 

Dentro de una function, un parámetro vararg de tipo T es visible como una matriz de T, es decir, la variable ts en el ejemplo anterior tiene el tipo Array.

Tenga cuidado con la diferencia con Java: en Java puede pasar una matriz como un solo parámetro, mientras que en Kotlin debe descomprimir explícitamente la matriz, de modo que cada elemento de la matriz se convierta en un argumento separado. Pero puedes hacerlo simplemente poniendo el carácter * antes del argumento correspondiente:

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

(Vea cómo le permite combinar los valores de una matriz y algunos valores fijos en una sola llamada, lo que no está permitido en Java).

La solución es con vararg y es posible iterar sobre el parámetro.

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