Хотите иметь функцию внутри открытого класса, которая может принимать лямбду-приостановку и запускать ее.
Я знаю, что это работает, когда вы явно указываете тип, но, если возможно, необходимо, чтобы он принимал лямбды общего назначения.
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() }