2017-06-22 31 views
1

我在kotlin下面的代码:如何在匿名课堂中引用自己?

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

你怎么看它的创建延迟任务(Runnableclass)简单的标准方式。值this引用anonimus对象实现Runnable编译并工作正常

但是,当我让lamdba此:

handler.postDelayed({ 
      Timber.i("run post msg") 
      handler.postDelayed(this, AppPrefs.SOCKET_INTERVAL) 
     },AppPrefs.SOCKET_INTERVAL) 

this参考outher类。

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

回答

4

你不能做到这一点。一个similar question,有人问科特林的论坛和yole(语言的创始人之一)这样说:

在拉姆达this指含有类的实例,如果有的话。一个lambda在概念上是一个函数,而不是一个类,所以不存在像this可以引用的lambda实例那样的东西。

事实上,一个拉姆达可以被转换成一个SAM接口的实例不改变this。在lambda中有这个意味着不同的事情取决于lambda是否得到SAM转换将是非常混乱。

+0

哦,一模一样的例子,我怎么问...谢谢! – abbath0767