我在kotlin
中有下一个代码:
handler.postDelayed(object : Runnable {
override fun run() {
Timber.i("run post msg")
handler.postDelayed(this, AppPrefs.SEARCH_DELAY)
}
},AppPrefs.SOCKET_INTERVAL)
您如何看待创建延迟任务的简单标准方法(使用Runnable
class
)。值this
对anonimus Object的引用实现Runnable
并编译并正常工作
但是当我为此制作lamdba时:
handler.postDelayed({
Timber.i("run post msg")
handler.postDelayed(this, AppPrefs.SOCKET_INTERVAL)
},AppPrefs.SOCKET_INTERVAL)
值this
引用了外部类。
如何从内部的anonimus类引用自己?
答案 0 :(得分:7)
你不能这样做。在Kotlin的论坛上问过similar question,而yole(该语言的创作者之一)说过:
lambda中的
this
指的是包含类的实例(如果有的话)。 lambda在概念上是一个函数,而不是一个类,所以没有this
可以引用的lambda实例。lambda可以转换为SAM接口的实例这一事实不会改变
this
。将它放在lambda中意味着不同的东西取决于lambda是否得到SAM转换将是非常混乱。