¿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!

  • ¿Es posible comstackr el código de kotlin para ejecutar sin la lib de time de ejecución? ¿Cómo?
  • ¿Por qué == crea error de compilation en diferentes types en Kotlin?
  • Kotlin: ¿cómo devolver la instancia del service en ejecución en la carpeta?
  • Script de Kotlin como configuration de Gradle - pase los parameters que no usan la extensión
  • Tipos incompatibles: A y kotlin.reflect.KType
  • ¿Cómo puedo hacer que cada punto final de descanso lea una cookie y use ese valor en okhttp Interceptor?
  • Límites generics de Kotlin para la class
  • Múltiples requestes de modificación2 usando Flowable en Kotlin
  • Cambiar solo un método de una class de java a kotlin
  • Botón libgdx hacia arriba sin efecto
  • ¿Cómo puedo descartar la alerta después de hacer clic en el button Atrás?