KotlinではOnClickListenerなどをListenerを省略(SAM変換)して書く事ができます。
今回は省略できる条件について調べてみました。
SAM変換可能なListenerは下のようにメソッドが1つである必要があります。
それとinterfaceの先頭にfunを付ける必要もあります。
fun interface MyListener { fun test() }
上記のようなInterfaceの場合、下のようにsetListenerの引数を簡素化できます。
fun setListener(listener: MyListener) {}
setListener {
}
省略しない場合は下のように書く必要があります。
setListener(object : MyListener { override fun test() { } })
下のようにメソッドが2つある場合は省略する事ができません。
fun interface MyListener { fun test() fun test2() }
Listenerのメソッドの引数が1つだけの場合、下のように引数を省略する事も可能です。
引数が2つ以上の場合は省略する事ができません。
setListener { Log.i("test", "$it") } fun interface MyListener { fun test(value: Int) }