#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はメソッドが一つのインターフェースでした。
![スクリーンショット 2020-01-09 20.22.23.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F226096%2Fa97050fe-f51f-bf5e-5586-d6f2ca6311f0.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6d593fb793ea58d8347f58fd7e397e15)
###参考
http://code.hildsoft.com/entry/2018/06/24/084325
https://blog.satotaichi.info/mystery_of_sam_type_conversion/