Kotlin 如何调用具有接收器的类的函数?
如何对具有接收器的类调用公共扩展函数Kotlin 如何调用具有接收器的类的函数?,kotlin,Kotlin,如何对具有接收器的类调用公共扩展函数 interface CoroutineActivity { // how can I call this function in example below? fun CoroutineScope.onCreate(savedInstanceState: Bundle?) } class CoroutineActivityDelegate(private val coroutineActivity: CoroutineActivity)
interface CoroutineActivity {
// how can I call this function in example below?
fun CoroutineScope.onCreate(savedInstanceState: Bundle?)
}
class CoroutineActivityDelegate(private val coroutineActivity: CoroutineActivity) {
fun onCreate(savedInstanceState: Bundle?) {
val onCreateScope = CoroutineScope(Dispatchers.Main + Job())
// how do I call an extension function with a receiver? This doesn't compile
coroutineActivity.onCreate(onCreateScope, savedInstanceState)
}
}
可能吗?我更喜欢CoroutineScope作为接收器,而不是第一个参数是的,这是可能的
您描述的函数是CoroutineActivity类型的分派接收器和CoroutineScope类型的扩展接收器
虽然没有通过直接提供两个接收器来调用此函数的语法,但可以在其dispatch receiver类型的范围内调用此函数,即在以下范围内调用:CoroutineActivity。这些范围包括:
CoroutineActivity及其子类型的成员范围;
具有CoroutineActivity类型或其子类型的扩展接收器的扩展范围;
CoroutineActivity类型的作用域或其子类型。
在合适的范围内,您可以简单地在CoroutineContext实例上调用该函数
最简单的方法是使用标准库作用域函数运行{…}或应用{…},将lambda传递给接收方,如下所示:
coroutineActivity.run {
val onCreateScope = CoroutineScope(Dispatchers.Main + Job())
onCreateScope.onCreate(savedInstanceState)
}