2017-06-22 9 views
1

私はkotlinの次のコードを持って:あなたはそれが(Runnableclassで)遅延タスクを作成するための簡単な標準的な方法です参照方法匿名のクラスで自分自身を参照する方法は?

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

を。 anonimusオブジェクトに値this参照はRunnableを実装し、コンパイルし、罰金

に動作します。しかし、私はこのためにlamdbaを作るとき:outherクラスを基準に

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

this

内部アノニマスクラスからあなた自身への参照はどのようにしていますか?

答えて

4

これはできません。いずれの場合ラムダで

this、含むクラスのインスタンスを参照:KotlinのフォーラムとYole社(言語のクリエイターの1)に頼まれたsimilar questionが、これは言いました。ラムダは概念的にはクラスではなく関数なので、thisが参照できるラムダインスタンスは存在しません。

ラムダをSAMインターフェイスのインスタンスに変換できるという事実は、thisを変更しません。ラムダでこれを持つことは、ラムダがSAMで変換されるかどうかによって、非常に混乱することになる。

+0

ああ、全く同じ例です...ありがとうございました! – abbath0767

関連する問題