百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

使用 Kotlin 密封类

wptr33 2024-12-03 18:45 11 浏览

当我们想要确保给定类型的值只能来自特定的有限子类型集时,密封类很有用。 换句话说,密封类用于表示受限类层次结构,当一个值可以具有受限集中的一种类型,但不能具有任何其他类型时。 密封类具有数量有限的直接子类,所有子类都定义在与密封类本身相同的文件中。

它们是抽象的。 这意味着我们不能直接实例化密封类的实例,只能实例化声明的子类之一。


如何在 Kotlin 中创建密封类?

新建一个类,在类前面加上sealed关键字,使其成为密封类。

sealed class Result

现在将两个子类直接添加到同一个文件中:

data class Success(val response : Response) : Result()
data class Failure(val exception : Exception) : Result()

所以 Result.kt 文件将是

sealed class Result {
   data class Success(val response : Response) : Result()
   data class Failure(val exception : Exception) : Result()
}

使用密封类,我们可以简化与任何类相关的状态管理。 让我们考虑处理三种状态的基本示例:加载、成功和失败。

sealed class Result {
   data class Success(val response : Response) : Result()
   data class Failure(val exception : Exception) : Result()
   data class Loading(var loading : Boolean) : Result()
}

与枚举类不同,每个案例都是类的单个实例,我们可以有密封类的子类的多个实例。

 data class Success(val response : Response) : Result()

现在我们将创建两个不同的 Success 实例。 例如,我们可以将 responseA 作为参数传递给第一个实例,将 responseB 作为参数传递给第二个实例,然后进行比较。

Kotlin 允许我们在密封类中使用 when 表达式。 当我们将这些与 Result 密封类一起使用时,我们可以根据结果是成功、失败还是加载来解析结果。

when (result) {
 is Result.Success -> showData()
 is Result.Failure -> showError()
 is Result.Loading -> showLoader()
}

我们不能在声明它的文件之外创建密封类的直接子类,并且密封类的构造函数始终是私有的。 这意味着如果我们在项目的另一个文件中定义了不同的类,我们不能扩展类 Result。 它提供了有限数量的层次结构,使其成为私有的。 因此,密封类的所有子类必须与密封类本身在同一个包中声明。


结论

在本文中,我们了解了 Kotlin 的密封类如何以及为什么它们可能是状态管理的更好选择。

相关推荐

为什么劝你不要买Switch OLED?(现在买switch oled划算吗)

那么在聊我们自己的观点前,还是先来看看这款任天堂SwitchOLED款式究竟带来了哪些变化吧。SwitchOLED已经把它最大的特点之一写到了名字里——OLED。这款产品改动最大的地方,就是在维...

新游戏、怀旧机!没有Switch新机的任天堂还能俘虏玩家们的心吗?丨C位

6月16日凌晨,日本电子游戏巨头任天堂在E3游戏展会上举行了发布会。翘首以盼的SwitchPro并未亮相,截止发稿,任天堂股价跌2.44%。但玩家们最为期待的《塞尔达:荒野之息2》将于2022年推出...

腾讯引进Nintendo Switch (OLED版)开启预售 多重满足您的娱乐需求

1月4日,腾讯引进NintendoSwitch(OLED版)开启预售,并将于1月11日正式发售。NintendoSwitch(OLED版)是NintendoSwitch的全新款式,配置色彩艳丽的...

股东大会上任天堂考虑移植更多WiiU和GC游戏到Switch

任天堂股东大会上有任天堂的忠实小股东玩家提议想在Switch玩到WiiU以及GC的经典游戏,对于这个问题,官方给了正面的回应。官方表示目前皮克敏等部分游戏已经可以在switch上玩了,今后会认真考虑玩...

《野狗子》M站均分低至60分!IGN仅给5分、VGC感觉像是PS3游戏

外山圭一郎工作室首部作品《野狗子》全球媒体口碑已解禁,总体评价一般,目前M站均分已降低至60分,21条评价,好评5条,中评14条,差评2条。IGN为其打出5分评价。《野狗子》的特色在于一些有趣的附身交...

《EA SPORTS FC 25》加入任天堂游戏试玩会,Switch版可免费体验

近日,EASPORTS宣布其最新力作《EASPORTSFC25》的Switch版本已正式加入任天堂游戏试玩会。即日起至3月2日,所有NintendoSwitchOnline订阅用户均可限时...

Double Kill!马里奥乐园+Switch能解任天堂焦虑吗?丨C位

近日,“超级任天堂世界”主题乐园在大阪环球影城开园,“超级马里奥之父”宫本茂现身揭幕仪式。任天堂近来喜事连连,2020年财年前九个月实现营收838亿元,贡献最大的Switch销量远超索尼PS5与微...

迷你主机、Switch好搭子:16寸4K超亮QLED CFORCE便携屏值得入手吗

一、迷你主机、Switch好搭子...

怎样查看Switch的“主机序列号信息”

小时候看到游戏机就走不动,现在玩游戏越来越方便了,比如Switch.今天讲讲怎样查看Switch的“主机序列号信息”。第一步:点击【设置】...

Switch版《EA SPORTS FC 25》容量相比前作缩水

备受期待的Switch版足球游戏《EASPORTSFC25》即将发布,根据任天堂官方网站的游戏信息显示,与前作《EASPORTSFC24》相比,游戏容量有所下降。在任天堂官方网站可以查到,...

switch双系统升级注意点(switch双系统升级注意点是什么)

升级系统有风险,建议只有实在想玩的游戏玩不了的时候再升级。1、针对双系统进行,单系统不适用。2、国行系统同pj系统的升级是分开的,互不干涉。国行系统进入后直接升级即可。3、升级之前,建议先做好各类备份...

《鬼泣4:特别版》游戏评测:全家老小齐上阵

游戏名称:鬼泣4:特别版英文名称:DevilMayCry?4SpecialEdition游戏类型:动作游戏ACT制作公司:CAPCOMCo.,Ltd.发行公司:CAPCOMCo.,L...

最好不要在超过35°C的环境温度里玩你的掌机

随着进入“初伏”,天气越发酷热,今年全球高温尤为严重。Valve对此发布了一个安全警告,告诉玩家SteamDeck可以在哪些温度下安全运行。Valve指出,SteamDeck的最佳工作环...

任天堂回应股东玩家 考虑Switch回溯游玩WiiU以及GC游戏

今日有任天堂的忠实小股东玩家提议想在Switch玩到WiiU以及GC的经典游戏,官方回应称正在考虑中,敬请期待。·当然,Switch回溯游玩WiiU以及GC游戏的方式有任天堂的在线服务直接游玩官方优...

Switch 2神秘C键用途曝光!或能连接初代NS手柄

直到近日,游戏圈内的风云人物、知名爆料人extas1s站了出来,带来一则令人颇感意外的消息。extas1s爆料称,玩家有望借助这个神秘的C按钮,实现初代Switch与Switch2...