しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

KotlinのListenerの省略形について調べる

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)
}