As run
- это функция, которая принимает лямбду с получателем ( kotlin reference ) в блоке, который присваивается run
this
, относится к получателю, который в вашем примере myObject
.
Поэтому вам нужно использовать , квалифицированное это -выражение, чтобы сослаться на включающий MyClass
-экземпляр. Как указано в комментариях, вы должны изменить свой код следующим образом:
class MyClass : MyCallback {
...
fun myMethod() {
val myObject = MyObject()
myObject.run {
setCallback(this@MyClass) // <-- qualified this
}
}
override fun onMyCallback() {
// Do something
}
}
Если вы хотите избежать меток, вам нужно заменить функцию run
. Возможная альтернатива - also
, которая вместо использования лямбды с получателем получает объект в качестве параметра:
class MyClass : MyCallback {
...
fun myMethod() {
val myObject = MyObject()
myObject.also { obj ->
//lambda without receiver, this refers to the enclosing instance of MyClass
setCallback(this)
}
}
override fun onMyCallback() {
// Do something
}
}