概念
- 密封類用來限制類的繼承關系,子類數量是固定的。
- 可以在類名之前使用sealed關鍵字將類聲明為密封類。
- 當對象具有來自有限集的類型之一,但不能具有任何其他類型時,使用密封類。
- 密封類的構造函數在默認情況下是私有的,它也不能允許聲明為非私有。
- 簡單來理解就是他是一個拓展版的枚舉(enum),不同之處在於枚舉的實例是唯一的,而密封類可以有很多實例,它們可以有不同的狀態。
使用
val items = listOf( Screen.Find, Screen.Store, Screen.Favourite, Screen.Profile ) //密封類 sealed class Screen(val route: String, val icon: ImageVector, @StringRes val resourceId: Int) { object Find : Screen(Constants.ROUTE_FIND, Icons.Default.Search, R.string.tab_find) object Store : Screen(Constants.ROUTE_STORE, Icons.Default.Store, R.string.tab_store) object Favourite : Screen(Constants.ROUTE_FAVOURITE, Icons.Default.Favorite, R.string.tab_favourite) object Profile : Screen(Constants.ROUTE_PROFILE, Icons.Default.AccountCircle, R.string.tab_profile) } //對比枚舉 enum class Screen(val route: String, val icon: ImageVector, @StringRes val resourceId: Int) { Find(Constants.ROUTE_FIND, Icons.Default.Search, R.string.tab_find), Store(Constants.ROUTE_STORE, Icons.Default.Store, R.string.tab_store), Favourite(Constants.ROUTE_FAVOURITE, Icons.Default.Favorite, R.string.tab_favourite), Profile(Constants.ROUTE_PROFILE, Icons.Default.AccountCircle, R.string.tab_profile), }
//寫法一 參考官網寫法 sealed interface Result sealed class RefineResult(val value: Int): Result sealed class MismatchResult: Result class Refine(value: Int) : RefineResult(value) object Mismatch : MismatchResult() //寫法二 同上 參考Android官方示例寫法 sealed class Result{ class RefineResult(val value: Int) : Result() object Mismatch : Result() }