active lifecycle state のときだけ通知するということが 可能 使⽤頻度: ⾼ // just LiveData "androidx.lifecycle:lifecycle-viewmodel:2.0.0" "androidx.lifecycle:lifecycle-compiler:2.0.0"
ViewModel and LiveData "androidx.lifecycle:lifecycle-extensions:2.0.0" // just ViewModel "androidx.lifecycle:lifecycle-viewmodel:2.0.0" "androidx.lifecycle:lifecycle-compiler:2.0.0"
→ Kotlin の sealed class を使う https://kotlinlang.org/docs/reference/sealed-classes.html sealed class はクラス継承先を制限できる sealed class Expr { data class Const(val number: Double) : Expr() data class Sum(val e1: Expr, val e2: Expr) : Expr() object NotANumber : Expr() } Expr 型のインスタンスの実体は Const, Sum NotANumber のどれか when (expr) { is Expr.Const -> TODO() is Expr.Sum -> TODO() Expr.NotANumber -> TODO() }
sealed class Status<out T> { object Loading : Status<Nothing>() data class Success<T>(val data: T) : Status<T>() data class Error(val throwable: Throwable) : Status<Nothing>() } → Kotlin の sealed class を使う data class Status( val isLoading: Boolean, val data: List<Repo>?, val throwable: Throwable? )