Kotlin密封類(Sealed)


概念

  • 密封類用來限制類的繼承關系,子類數量是固定的。
  • 可以在類名之前使用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()
    }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM