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.

  • Kotlin en estudio de Android
  • Problema con Kotlin después de que Android Studio se actualizó a 0.6
  • Kotlin: ¿Podemos usar @Subscribe de EventBus (GreenRobot) en Kotlin?
  • Por qué las entidades Room no funcionan con properties inmutables en Android
  • forma correcta de ejecutar la aplicación kotlin desde la tarea gradle
  • Usando FirebaseListAdapter en Kotlin
  • Kotlin, problema de condición de carrera
  • El object "val" de package de import de Kotlin falla desde el module de biblioteca de Android si está equipado con JaCoCo
  • Cómo get el valor del ObservableField en android
  • Cómo convertir la salida de la function a la Unidad con Kotlin
  • La validation de la aplicación bloquea los valores de EditText