android - 如何在 Kotlin 的“运行”或“应用”中引用实现回调
问题描述
如何在“运行”或“应用”中有实现参考
class MyClass : MyCallback {
...
fun myMethod() {
val myObject = MyObject()
myObject.run {
setCallback(this) // <-- How to have the MyCallback's reference here?
}
}
override fun onMyCallback() {
// Do something
}
}
解决方案
As是一个函数,它在给定的块中run
使用带有接收器(kotlin 参考run
this
)的 lambda 来引用接收器,这在您的示例myObject
中。
因此,您需要使用限定的 this -expression 来引用封闭的MyClass
-instance。如评论中所述,您需要像这样更改代码:
class MyClass : MyCallback {
...
fun myMethod() {
val myObject = MyObject()
myObject.run {
setCallback(this@MyClass) // <-- qualified this
}
}
override fun onMyCallback() {
// Do something
}
}
如果要避免使用标签,则必须替换该run
功能。一种可能的替代方法是also
,而不是使用带有接收器的 lambda,而是将对象作为参数:
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
}
}
推荐阅读
- c# - 在 Visual Studio 图表中选择时间跨度 (C#)
- javascript - 如果满足条件,则返回 true
- amazon-web-services - 如何检查我的代码是否在 AWS EC2 上的容器中运行
- git - 如何在文件结尾使用特殊字符跟踪 Git-LFS 中的文件?
- vb.net - 如何使用 vb.net 在现有的 google 电子表格中插入新工作表?
- powershell - PowerShell 中的 Ctrl-z 不起作用!我怎么修?
- amazon-web-services - Amazon S3 Glacier 与 Glacier 存储类
- angular - 在设计使用组合优于继承的 Angular 组件时如何处理依赖注入?
- javascript - Lyniate Rhapsody:在对象中找不到函数 toISOString
- powerbi - 是否可以将表格的每一列值除以powerbi中另一个表格的每一列值?