如何在匿名课堂中引用自己?

时间:2017-06-22 10:11:01

标签: kotlin

我在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类引用自己?

1 个答案:

答案 0 :(得分:7)

你不能这样做。在Kotlin的论坛上问过similar question,而yole(该语言的创作者之一)说过:

  lambda中的

this指的是包含类的实例(如果有的话)。 lambda在概念上是一个函数,而不是一个类,所以没有this可以引用的lambda实例。

     

lambda可以转换为SAM接口的实例这一事实不会改变this。将它放在lambda中意味着不同的东西取决于lambda是否得到SAM转换将是非常混乱。