いないお部屋のセッションでバッキングフィールドの話されている雰囲気を感じたけれど Kotlin 1.7.0 で入ろうとして入らなかった記憶がありますね #DroidKaigi
— バトルプログラマー柴田智也?uwu=true (@tomoya_shibata) 2024年9月12日
ふと思い出して、DroidKaigi 2024 で Masayuki Suda さんが発表された Kotlin 2.0 が与える Android アプリ開発への進化のお話がそれだった。
例えば Android の ViewModel で UiState を宣言するような場面で以下のように書くことができる。
// Before private val _uiState = MutableStateFlow(UiState<Something>()) val uiState = _uiState.asStateFlow() // After val uiState: StateFlow<UiState<Something>> field = MutableStateFlow(UiState<Something>())
宣言をしているクラス内では MutableStateFlow
、外部からは読み取り専用の StateFlow
として見えながら、どちらからも uiState
の名前で参照することができる。
この機能は Kotlin 2.2 に予定されているが 2.0 でも Experimental で使うことができ、次の設定を build.gradle
に加えることで有効になる。
kotlin {
sourceSets.configureEach {
languageSettings.enableLanguageFeature("ExplicitBackingFields")
}
}
さらに Android Studio の Settings で Enable K2 mode
にもチェックを入れておく。
これを入れなくともビルドは通るが、赤いエラーの表示は出てしまう。