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変換を適用できるようになりました。