¿Cómo omitir los parameters lambda en Kotlin?

A veces no uso todos los parameters lambda, como el segundo parámetro en el siguiente ejemplo, que es un valor antiguo en un evento de cambio:

selected.onChange { value, _ -> checkBox.isChecked = value } 

¿Cómo los omito? Porque eso desordera el código y daña la legibilidad. Previamente utilicé el método anterior, pero en kotlin 1.0.0-beta-1103 los caracteres de subrayado están reservados.

A partir del 1.1, puedes hacer exactamente eso:

Subrayar para las variables no utilizadas (desde 1.1)

Si el parámetro lambda no se utiliza, puede colocar un guión bajo en lugar de su nombre:

 map.forEach { _, value -> println("$value!") } 

https://kotlinlang.org/docs/reference/lambdas.html#underscore-for-unused-variables-since-11

Debo añadir que el comstackdor ahora genera una advertencia para los parameters lambda no utilizados, y hay una nueva solución rápida correspondiente para Android Studio

Puede usar los identificadores de escape para Java que son palabras key en Kotlin (es decir, backticks) o sobrecargar onChange .

Backticks

 selected.onChange { value, `_` -> checkBox.isChecked = value } 

Sobrecarga en onChange

 interface Listener<T1, T2> { fun onChange(f: (T1, T2) -> Unit) // original method fun onChange(f: (T1) -> Unit) // new method } 

Y si no puede cambiar Listener<T1, T2> (o cualquier otro tipo settable de su ejemplo), puede usar una function de extensión :

 fun <T1, T2> Listener<T1, T2>.onChange(f: (T1) -> Unit) = onChange { t1, t2 -> f(t1) } 

A continuación, puede invocar el onChange como desee:

 selected.onChange { value -> checkBox.isChecked = value }