Kotlin学习快速入门(9)—— 密封类的使用

原文地址: Kotlin学习快速入门(9)—— 密封类的使用 – Stars-One的杂货小窝

代码逻辑中,很多时候我们会需要分支语句,来根据数据的情况走不同的处理逻辑,而密封类就是在这种情况下,方便我们的使用

介绍

密封类是用来表示 受限的类继承结构

即当类中的一个值只能是有限的几种类型,而不能是其他的任何类型,从使用角度来说,相当于是枚举类的扩展

PS: Java17也有了这个密封类

使用

假设我们有中情形,需要根据一个type的数值来进行不同的逻辑,如下代码:

fun getMsg(type: Int) :String{
    return when(type) {
        1 -> TODO()
        2 -> TODO()
        else -> TODO()
    }
}

编译器一定会提示我们需要写上有个else,如下图所示

Kotlin学习快速入门(9)—— 密封类的使用

这个时候是不是有点繁琐了,于是我们想到的一种优化方法,就是使用枚举类

enum class MyType{
    TYPE_1,TYPE_2
}

fun getMsg(type: MyType) :String{
    return when(type) {
        MyType.TYPE_1 -> TODO()
        MyType.TYPE_2 -> TODO()
    }
}

而且可以通过编译器,将所有的枚举都加到分支上去(快捷键按下 Alt+Enter即可),如下图所示

Kotlin学习快速入门(9)—— 密封类的使用

但是,这个情况也有些限制,就是枚举类用来判断类型,但是不能灵活地携带些数据,如果使用密封类,就是解决此问题

密封类的关键字为 sealed class,如下代码所示:

sealed class MyType
class Type1(val data:String):MyType()
class Type2(val errorCode:Int):MyType()

fun getMsg(type: MyType) :String{
    return when(type) {
        is Type1 -> TODO()
        is Type2 -> TODO()
    }
}

这里Type1和Type2类都可以携带自己的数据

当然,上面只是个简单的写法,MyType这个类也可以继承或实现其他接口,比如说在RecyclerView中定义个ItemViewType,用来创建不同的itemView的类型

参考

Original: https://www.cnblogs.com/stars-one/p/16583350.html
Author: Stars-one
Title: Kotlin学习快速入门(9)—— 密封类的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609612/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MyBatis架构与源码分析<资料收集>

    1、架构与源码分析 :https://www.cnblogs.com/luoxn28/p/6417892.html 、https://www.cnblogs.com/wangdai…

    Java 2023年5月30日
    059
  • selenium 常见面试题以及答案(Java版)

    1.怎么 判断元素是否存在? 判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出 NoSuchElementException 这样就可以使用…

    Java 2023年5月29日
    0114
  • spring中过滤器和拦截器的使用

    过滤器和拦截器的使用 拦截器应用场景 &#x62E6;&#x622A;&#x5668;&#x672C;&#x8D28;&#x4E0A…

    Java 2023年6月9日
    067
  • Java应用系统监控方法简介

    tsar 阿里巴巴开源的实时系统监控工具。其内部的sunfire有部分指标就是基于该工具每分钟采集一次来获取的。github 监控项及数据来源一览 摘自tsar/info.md 监…

    Java 2023年5月29日
    067
  • SpringBoot-Redis

    SpringBoot 整合 Redis SpringBoot-Redis 15.1 导入相关依赖 org.springframework.boot spring-boot-star…

    Java 2023年6月5日
    058
  • 基于Gradle的Spring源码下载及构建技巧

    1 Spring 5源码下载 首先你的JDK需要升级到1.8以上版本。从Spring 3.0开始,Spring源码采用GitHub托管,不再提供官网下载链接。这里不做过多赘述,大家…

    Java 2023年6月7日
    0108
  • Markdown笔记

    Markdown笔记 二级标题 三级标题 四级标题 六级标题 加粗 hello Hello Hello Hello Hello 引用 这是一个引用 分割线 图片 超链接 列表 无序…

    Java 2023年6月15日
    069
  • 错误721 — 在虚拟机中连接VPN, 显示验证用户名和密码之后出错

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年5月30日
    071
  • 网关Zuul、Gateway、nginx的区别

    zuul:是Netflix的,早期在微服务中使用较广泛,是基于servlet实现的,阻塞式的api,不支持长连接。只能同步,不支持异步。不依赖spring-webflux,可以扩展…

    Java 2023年5月30日
    068
  • vue3引入Iconfont

    在 main.js或 main.ts入口js文件中添加 css import "./assets/font_3172792_ydxl39tha8a/iconfont.cs…

    Java 2023年6月7日
    058
  • .net 爬虫框架技术选型

    个人认为爬虫框架分抓取框架和分析框架 1)抓取框架 .net 市面上好的似乎不多,选择要素分两种:1.轻量型,2.重量型。 轻量型是可以定制一些特殊的功能或者插件开关形式。总体性能…

    Java 2023年6月8日
    069
  • 满襟酒气

    我本是槐花院落闲散的人,满襟酒气。 小池塘边跌坐看鱼,眉挑烟火过一生。 posted @2022-08-25 17:12 lslime 阅读(62 ) 评论() 编辑 Origin…

    Java 2023年6月15日
    060
  • TCP 为什么是 三次 握手 不是两次 不是四次

    客户端连续发送多次 SYN 建⽴连接的报⽂,在⽹络拥堵等情况下: ● ⼀个「旧 SYN 报⽂」⽐「最新的 SYN 」 报⽂早到达了服务端; ● 那么此时服务端就会回⼀个 SYN +…

    Java 2023年6月6日
    096
  • 【校招VIP】高校陌生人活动|产品的竞品和需求分析

    哈喽大家好,今天给大家介绍的是校招VIP在线实习约起来的同步课程。 本次课程是基于高校陌生人的活动平台,是大学生真实的商业需求,对大家的校招也、简历的描述以及面试的核心点都有所帮助…

    Java 2023年6月5日
    079
  • Spring核心原理分析之MVC九大组件(1)

    本文节选自《Spring 5核心原理》 1 什么是Spring MVC Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相…

    Java 2023年6月7日
    070
  • centos 6.9安装mysql

    1、确认mysql是否已安装,有下面的代码可知 2、卸载已安装的mysql,建议使用yum命令,因为yum命令可以自动删除与mysql相关的依赖;如果使用rpm命令,则还需要手动去…

    Java 2023年6月16日
    054
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球