#SAM(Single Abstract Method)変換
KotlinのSAM変換はSAMを定義したinterfaceを、ラムダ式に置き換えることです。
(javaで記述しているInterfaceしかSAM変換出来ません。)
SAM(Single Abstract Method)→メソッドが一つしかない抽象クラス
###代表的なsetOnClickListener
での例
//SAM変換なし
AAAButton.setOnClickListener( object: View.OnClickListener{
override fun onClick(view: View?): Unit {
Log.v("ログ出力")
}
})
//第1段階省略
//ラムダ化 'object: View.OnClickListener'を省略して無名関数へ
AAAButton.setOnClickListener( { view ->
Log.v("ログ出力")
})
//第2段階省略
//引数が一つであれば省略できて、処理部分で必要ならitとして使用できるため'view'を省略
AAAButton.setOnClickListener({ Log.v("ログ出力") })
//第3段階省略
//メソッド(ここではsetOnClickListener)の最後の引数がラムダ式なら、{}部分を後ろに書ける
AAAButton.setOnClickListener(){ Log.v("ログ出力") }
//第4段階省略
//その状態で()内に引数が無ければ、つまりメソッドの引数がラムダ式だけなら()を省略できる
AAAButton.setOnClickListener{ Log.v("ログ出力") }
//Tips
//onClickを行うラムダ関数に2つ以上引数がある場合
AAAButton.setOnClickListener{ 引数1,引数2 => Log.v("ログ出力") }
###Tips
SAM(Single Abstract Method)→メソッドが一つしかない抽象クラス
↓OnclickListenerはメソッドが一つのインターフェースでした。
###参考
http://code.hildsoft.com/entry/2018/06/24/084325
https://blog.satotaichi.info/mystery_of_sam_type_conversion/