¿Cómo asignar un valor nulo a una variable de tipo de function en Kotlin?

Tengo una variable que contiene una callback, y de forma pnetworkingeterminada su valor debe ser nulo. Pero esta syntax no parece funcionar.

var callback1 : () -> Unit = null var callback2 : ((a) -> c, b) -> Unit = null 

Mi solución actual es asegurarme de que las devoluciones de llamadas tengan implementaciones pnetworkingeterminadas.

 var callback1 : () -> Unit = { } var callback2 : ((a) -> c, b) -> Unit = { a, b -> } 

Sin embargo, esto dificulta comprobar si se estableció o no la callback, y posiblemente la implementación pnetworkingeterminada tenga algún costo (¿es así?). ¿Cómo asignar un valor nulo a una variable de tipo de function en Kotlin?

Como todas las variables en Kotlin, las references de function normalmente no pueden ser nulas. Para permitir un valor nulo, debes agregar un ? hasta el final de la definición de tipo, así:

 var callback1 : (() -> Unit)? = null var callback2 : (((a) -> c, b) -> Unit)? = null 

Por lo general, necesitará paréntesis alnetworkingedor de toda la statement de tipo de function. Incluso si no es obligatorio, probablemente sea una buena idea. También necesitará invocar la function utilizando invoke con el operador nulo seguro:

 callback1?.invoke() 

El enfoque de implementación de no hacer nada es probablemente más conveniente a largo ploop, y me parece un poco más "kotlin-y". Al igual que con la mayoría de las cosas en informática, no me preocuparía el costo de performance de la implementación pnetworkingeterminada a less que tenga datos de performance específicos que indiquen que es un problema.

Una forma de determinar si la callback se ha establecido sin permitir valores nulos sería usar el patrón de object nulo :

 val UNSET_CALLBACK1: () -> Unit = {} var callback1 : () -> Unit = UNSET_CALLBACK1 fun callback1IsSet(): Boolean { return callback1 !== UNSET_CALLBACK1 } 

¡Espero que esto ayude!

  • Proyecto Android kotlin construido atascado en la aplicación: tarea kaptDebugKotlin
  • Combinar / fusionar classs de datos en Kotlin
  • Choque de extensión Kotlin
  • Código Kotlin comstackdo a Jar para ser utilizado para el Proyecto Java?
  • Botones de acceso del layout inflados programáticamente dentro de otro layout
  • El nombre de la propiedad privada no coincide con la expresión regular
  • Kotlin Generics tipo personalizado con comodín
  • ¿Cómo pasar vararg como matriz para funcionar en Kotlin?
  • ObjectAnimator.ofFloat no puede tomar Int como parameters directamente en kotlin
  • ¿Por qué Kotlin Lang permite solo una function principal en el proyecto?
  • Propiedad de superclass no inicializada en class Derivada