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()
    }

 

 

posted @ 2021-11-25 10:08  勤奋的小铁  阅读(1069)  评论(0编辑  收藏  举报