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

abb*_*767 7 kotlin

我有下一个代码kotlin:

handler.postDelayed(object : Runnable {
            override fun run() {
                Timber.i("run post msg")
                handler.postDelayed(this, AppPrefs.SEARCH_DELAY)
            }
        },AppPrefs.SOCKET_INTERVAL)
Run Code Online (Sandbox Code Playgroud)

你如何看待它是创建延迟任务的简单标准方法(with Runnable class).this对anonimus Object的值引用实现Runnable并编译并正常工作

但是当我为此制作lamdba时:

handler.postDelayed({
            Timber.i("run post msg")
            handler.postDelayed(this, AppPrefs.SOCKET_INTERVAL)
        },AppPrefs.SOCKET_INTERVAL)
Run Code Online (Sandbox Code Playgroud)

this引用外层类.

如何从内部的anonimus类引用自己?

Mib*_*bac 7

你不能做这个.一个类似的问题,有人问科特林的论坛和yole(语言的创始人之一)这样说:

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

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