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.

  • JNI GetShortArrayElements falla con SIGSEGV SEGV_ACCERR
  • ¿Cómo puedo ejecutar una sola testing de Android usando Kotlin?
  • Kotlin: la expresión 'longitud' de tipo 'Int' no se puede invocar como una function. La function 'invoke ()' no se encuentra
  • Kotlin: diferencia entre el object y el object acompañante en una class
  • Problemas de Kotlin con el data binding de Android
  • Sin informe de cobertura para los methods de Kotlin incorporados
  • Usando kotlin-stdlib 1.1.51 pero se carga kotlin-runtime 1.3
  • Accidentes de aplicaciones de cronómetro Android
  • gradle no puede comstackr Google Places API
  • Dibujando líneas desde ViewModel TornadoFX
  • No se puede usar string.contains () en la expresión de kotlin `when`