No se puede acceder a la class externa desde una class anónima

No puedo acceder al método externo desde dentro del anónimo

class MyClass() { fun doSomeStuff() { for (brandView in holder.brandImages) { brandView.onClick { if (brandView.brandId != null) { notifyStateChanged() } } } } fun notifyStateChanged() { print("something") } } 

Tengo un error de time de compilation:

 Error:(46, 31) org.jetbrains.kotlin.codegen.ComstacktionException: Back-end (JVM) Internal error: Don't know how to generate outer expression for class <closure-BrandsBarView$1> Cause: Don't know how to generate outer expression for class <closure-BrandsBarView$1> File being compiled and position: (46,31) in C:/Users/piotr/IdeaProjects/MerciIt/app/src/main/java/pl/com/digita/merciit/app/ui/controls/colorswitcher/brandsbar/BrandsBarView.kt PsiElement: { if (brandView.brandId != null) { notifyStateChanged() //brandView.setTicked(!brandView.isTicked) } } The root cause was thrown at: CodegenContext.java:160 at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:299) (...) 

Entonces, ¿qué estoy haciendo mal?

Solo para discusiones teóricas:

 for (brandView in holder.brandImages) { setupBrandView(brandView) } fun setupBrandView(brandView: BrandTickerView) { brandView.onClick {brandView.isTicked = !brandView.isTicked; dataChanged?.invoke() } } 

Funciona bien

En las classs anónimas, this refiere a la class exterior. Desde el object la actividad externa debe ser referida explícitamente

 class MainActivity : Activity() { public override fun onCreate(savedInstanceState: Bundle?) { ... text_view.setOnClickListener{ v -> this.doActivityStuff() } ... fun doActivityStuff() { // do some stuff } text_view.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View?) { this.onClick(v) // this refer to onClickListener this@MainActivity.doActivityStuff() // this refer to MainActivity } }) } 

Para ayudar con su situación, será bueno ver la jerarquía de classs.

  • ¿Cuál de las corutinas (goroutines y corotines de kotlin) son más rápidas?
  • Android Library Module desarrollado en Kotlin exportado a la aplicación Java causando una resolución fallida de: Lkotlin / jvm / internal / Intrinsics
  • ¿Cuáles son los casos de uso de las properties en línea de Kotlin?
  • No se puede 'observar en' hilo principal con RxKotlin
  • Cómo hacer PATCH correctamente en lenguajes fuertemente tipados basados ​​en Spring - example
  • Error de generación: Error: ejecución fallida para la tarea ': aplicación: compileLightningLiteDebugKotlin'. > Error de compilation
  • Mapa de Mybatis COALESCE (int, 0) a java.lang.Long
  • ¿Cómo solucionar este error en la demostración web de Kotlin?
  • Simplificado agregar y replace fragments en Kotlin
  • Java Int para flotar para get 1f para 1
  • Kotlin / Java - Datos de la database de testing proporcionados REST API