2017-06-22 53 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