¿Cómo referirte a ti mismo en la class anónima?

Tengo el siguiente código en kotlin :

 handler.postDelayed(object : Runnable { override fun run() { Timber.i("run post msg") handler.postDelayed(this, AppPrefs.SEARCH_DELAY) } },AppPrefs.SOCKET_INTERVAL) 

cómo ves es una forma estándar simple de crear una tarea demorada (con class Runnable ). Valora this references a anonimus Object implementa Runnable y comstack y funciona bien

Pero cuando hago lamdba por esto:

 handler.postDelayed({ Timber.i("run post msg") handler.postDelayed(this, AppPrefs.SOCKET_INTERVAL) },AppPrefs.SOCKET_INTERVAL) 

Valora this referencedo a la class externa.

¿Cómo se hace reference desde la class de anonimus interno a ti mismo?

No puedes hacer esto. Se hizo una pregunta similar en el foro de Kotlin y yole (uno de los creadores del lenguaje) dijo esto:

this en un lambda se refiere a la instancia de la class contenedora, si hay alguna. Una lambda es conceptualmente una function, no una class, por lo que no existe una instancia lambda a la que this pueda referirse.

El hecho de que una lambda pueda convertirse en una instancia de una interfaz SAM no cambia this . Tener esto en una lambda significa diferentes cosas dependiendo de si la lambda se convierte en SAM sería extremadamente confuso.

  • No se puede ejecutar el file jar. (Error: no se pudo encontrar o cargar la class principal co.pissarra.Mainkt)
  • ¿Cómo crear una variable que pueda tomar cadenas y funciones en Kotlin?
  • @Antes de que la anotación sea ignorada por kotlin en la testing de expreso?
  • FragmentManager lanza IllegalArgumentException en Kotlin
  • ¿Por qué == crea error de compilation en diferentes types en Kotlin?
  • Kotlin-js: define el número de decimales
  • DiffUtils y multi selección
  • No se puede ejecutar kotlin con daga 2
  • Cómo restablecer el contenido de la vista de reciclador en la actividad de llamadas usando Kotlin
  • La expresión del object Kotlin no funciona como se esperaba
  • Devuelve valor para una variable que aparentemente puede ser nula pero realmente no puede