Хотите иметь функцию внутри открытого класса, которая может принимать приостановленную лямбду и запускать ее.
Я знаю, что это работает, когда вы явно указываете тип, но, если возможно, он должен принимать лямбды с общей областью действия.
class ChildClass : SuperClass() {
// does work :)
fun launch(block: suspend ChildClass.() -> Unit) =
coroutineThing { this.block() }
}
open class SuperClass {
// doesn't work :(
fun <T : SuperClass> launch(block: suspend T.() -> Unit) =
coroutineThing { this.block() }
}
Я получаю сообщение об ошибке Expression 'block' of type 'suspend T.() -> Unit' cannot be invoked as a function. The function 'invoke()' is not found.
Изменить:
Пытаемся в конечном итоге вызвать этот метод из экземпляра ChildClass следующим образом: ChildClass().launch { doStuff() }