我创建了一个带有输入参数的类,该输入参数是lambda函数:
class MyClass(var onClick: () -> Unit) {
private val title = SomeComponent()
init {
// register some listeners that finally invokes `onClick`
// for simplicity, let's assume:
title.addKeyListener(object : KeyListener {
override fun keyPressed(e: KeyEvent?) {
onClick()
}
})
}
}
此MyClass
使用提供的onClick
进行了初始化:
val instance = MyClass(
onClick = {
// some logic
}
)
是否可以从onClick
函数内部访问类上下文?
答案 0 :(得分:2)
当然,您可以将onClick
MyClass
作为接收者。
class MyClass(var onClick: MyClass.() -> Unit) { //...
init {
//...
onClick()
//...
}
}
fun main() {
MyClass {
// "this" is the instance of MyClass here
}
}
在init
块中,您可以使用三个选项来调用onClick()
:
this.onClick()
onClick(this)
onClick() // is invoked on this, but this is omitted
我会选择最后一个。