密封類用來表示受限的類繼承結構:當一個值為有限幾種的型別、而不能有任何其他型別時,在某種意義上,他們是列舉類的擴展:列舉型別的值集合也是受限的,但每個列舉常量只存在一個實體,而密封類的一個子類可以有可包含狀態的多個實體,
以下代碼用來表示網路狀態的密封類
sealed class LoadState(val msg: String) {
class Loading(msg: String = "") : LoadState(msg)
class Success(msg: String = "") : LoadState(msg)
class Fail(msg: String) : LoadState(msg)
}
一個密封類是自身抽象的,它不能直接實體化并可以有抽象(abstract)成員,
密封類不允許有非-private 建構式(其建構式默認為 private),
擴展密封類子類的類(間接繼承者)可以放在任何位置,而無需在同一個檔案中
使用密封類的關鍵好處在于使用 when 運算式的時候
viewModel.loadState.observe(this, Observer {
when (it) {
is LoadState.Success -> {
}
is LoadState.Fail -> {
}
is LoadState.Loading -> {
}
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/262096.html
標籤:區塊鏈
上一篇:【投資加密貨幣】調查:41%的英國人認為投資股票與投資加密貨幣的風險對等
下一篇:使用 Harbor 提供可信鏡像
