LoginSignup
13
7

More than 3 years have passed since last update.

KotlinのSAM変換とは

Posted at

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

参考

http://code.hildsoft.com/entry/2018/06/24/084325
https://blog.satotaichi.info/mystery_of_sam_type_conversion/

13
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
7