Kotlin 1.4のSAM変換改善

Kotlin 1.4で改善されたSAM変換についてまとめます

Kotlin interfaceのSAM変換

これまでKotlinのinterfaceはSAM変換できず、以下のように object キーワードを明示的に使う必要がありました。
(Java interfaceの場合はこれまでもSAM変換できていました)

Kotlin 1.4ではKotlin interfaceでもSAM変換が可能になりました。ただし、そのままで使えず、interfaceに fun 修飾子を付ける必要があります。

Java interfaceの異なる引数のSAM変換

例えば、以下のようなJavaコードがあったとします。引数で2つのSAM変換可能なinterfaceを受け取ります。

これをKotlinから使うときはSAM変換できるのは、両方ともラムダ式にした場合のみでした。片方がオブジェクトになってる場合は片方をラムダにはできませんでした。

Kotlin 1.4からは片方がオブジェクトとラムダを混ぜることが可能になりました。

Android開発での影響

これの影響として、Android開発で使われるktxの拡張関数が一部不要になったりします。

例えば、LiveDataでobserveするときにktxを使うことで記述を楽にすることができました。

liveData.observe(this) { }

これがKotlin 1.4からはktxがなくても可能になります。

これに伴い、こちらの拡張関数はDeprecatedになる予定です。

他にもktx等の拡張関数が不要になるものがあるかもです。

KotlinでのJava SAM変換

これまではJava SAM変換を適用して、以下のような書き方ができませんでした。

Kotlin 1.4からはSAM変換を適用できるようになりました。

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store