Tienda lambda en una variable en kotlin

Estoy empezando a desarrollar en Android con kotlin y tengo un problema con lambdas. Tengo una function para configurar un oyente desde mi punto de vista, esto se ve así:

fun setListener(listener: () -> Unit) { } 

El problema es que el código pasado como lambda no se ejecutará en la function setListener, se ejecutará en otra parte de mi código (específicamente cuando se selecciona un elemento de un spinner), así que tengo que "save" o "almacenar" esta lambda en una variable / propiedad para que pueda ejecutarla cuando sea necesario. Alguna idea sobre como hacerlo?

Editar: lo he logrado haciendo:

 private var listener: (() -> Unit)? = null fun setListener(listener: () -> Unit) { this.listener = listener } 

Hay una mejor manera de hacerlo? Gracias

Así es cómo puedes hacerlo:

 class Foo { private var listener: () -> Unit = {} fun setListener(listener: () -> Unit) { this.listener = listener } } 

Sin embargo, no se recomienda escribir sets manualmente en Kotlin. En cambio, puede hacer que su propiedad sea pública:

 class Foo { var listener: () -> Unit = {} } 

Como reference, aquí están los documentos sobre properties con muchos ejemplos.

Puede almacenar una function en una propiedad fácilmente. La forma más simple:

 var listener: (() -> Unit)? = null 

Uso:

 foo.listener = { println("called") } 

Si desea que su propiedad esté configurada solo, puede crear una propiedad pública con getter inutilizable y una propiedad privada para uso interno. Ejemplo completo:

 class Example { // for internal use private var _listener: (() -> Unit)? = null // public set-only var listener: (() -> Unit)? @Deprecated(message = "set-only", level = DeprecationLevel.ERROR) get() = throw AssertionError() // unusable getter set(value) { _listener = value } // write-through setter fun somethingHappend() { _listener?.invoke() } } 
  • ¿Cómo convierto una matriz de cadenas a una matriz de Int en Kotlin?
  • Kotlin: lambda nunca comstack
  • Kotlin - Cómo recursivamente llamar a una function lambda
  • Kotlin genera class interna para lambda
  • Configuración de oyentes de Android en Kotlin: uso del retorno en lambdas
  • Polimorfismo en las funciones de extensión en Kotlin
  • Kotlin no puede acceder a kotlin.jvm.functions.Function1 cuando llama a la function kotlin con java lambda
  • Expresiones Lambda en Kotlin
  • Kotlin lambdas y tipo de inferencia
  • Parámetros de Clase abstracta vs. Lambda
  • ¿Cómo mejorar la syntax de kotlin lambda?