42413


無名クラス（オブジェクト？）内で this キーワードを使うと、その無名オブジェクトが取得できますが、SAM変換されたブロック内で this
を書くと、外側のクラスの this になってしまいます。

SAM変換内で無名クラスのオブジェクトにアクセスするにはどうすればいいでしょうか？

[code]

    class Foo(context: Context) {
        val button = Button(context)
    
        init {
    
            button.setOnClickListener(object : View.OnClickListener {
                override fun onClick(view: View?) {
                    this // これはView.OnClickListener
                    this@Foo // Fooにもアクセスできる
                }
            })
    
            button.setOnClickListener {
                this // これはFooになる
                // View.OnClickListenerにアクセスする方法が不明!!!
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2018-01-30T02:08:37.903
41312
2018-03-15T09:18:47.760
8148
question
kotlin
SAM変換内で無名クラスのthisにアクセスしたい


<https://discuss.kotlinlang.org/t/is-this-accessible-in-sams/1477/3>

こちらの回答によると、Kotlinではラムダはクラスではなく関数として扱われるので、thisによってラムダのインスタンスにアクセスすることはできないというのが仕様のようです。  
SAMによる無名クラスへの変換が行われる場合にも、混乱を防ぐために他のラムダと同様にアクセスできなくしているとのことでした。


CC BY-SA 3.0
2018-03-15T09:18:47.760
42413
2018-03-15T09:18:47.760
915
41312
answer