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)

大家都在看

  • SpringCloud中使用Nacos作为配置中心原理

    使用了是Nacos的自动配置依赖 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config 2.2.5.RELEASE…

    Java 2023年5月30日
    083
  • Spring Cloud Consul 入门指引

    1 概述 服务发现——自动注册和注销服务实例的网络位置 健康检查——检测服务实例何时启动并运行 分布式配置——确保所有服务实例使用相同的配置 在本文中,我们将了解如何配置 Spri…

    Java 2023年6月7日
    0100
  • 基于crudapi零代码后端Java SDK二次开发之API认证和鉴权(二)

    基于crudapi后端Java SDK二次开发之API认证和鉴权(二) 回顾 通过上一篇文章基于crudapi后端Java SDK二次开发之环境搭建(一)的介绍,后台API已经搭建…

    Java 2023年6月6日
    0106
  • 4.环境搭建

    1.springboot项目: 创建provider作为服务提供方 创建consumer作为服务调用方 1.provider代码示例 结构如图 1.启&amp…

    Java 2023年6月5日
    084
  • Python基础

    1.为什么学习Python 2.Python和其他语言的区别 从三个方面看Python 语言特点 语言类型 第三方库 3.Python的优势 4.Python的解释器种类? 5.p…

    Java 2023年6月7日
    071
  • 缓存穿透,缓存雪崩,缓存击穿

    缓存穿透,缓存雪崩,缓存击穿 本文整理自黑马程序员相关资料 缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都部存在,这样缓存永远不会生效。因此这些请求都会穿过缓存,最终请…

    Java 2023年6月8日
    088
  • 线程池面试必考

    你对Java线程池了解吗?你有用过线程池吗?那先说下线程池核心参数吧。。。对不起,我回去再看看吧。 为了一丝体面,我们今天来整理几个面试中常考线程池面试问题吧! 为什么要用线程池?…

    Java 2023年6月8日
    073
  • 阿里云-快速搭建Spring Boot环境(Java,IntelliJ IDEA)

    本步骤主要介绍使用Spring Assistant插件来搭建简单的Spring Boot项目。 在IntelliJ IDEA启动界面,单击 Create New Project。 …

    Java 2023年5月29日
    078
  • Flutter水印

    如何给Flutter页面添加水印? 可以通过OverlayState实现 如下效果图: 具体实现源码 时刻怀有一颗虔诚之心,乐于分享。知识才更有意义。 posted @2020-0…

    Java 2023年5月29日
    094
  • Word书签替换,加盖电子印章及转换PDF(Java实用版)

    一、前言 在项目中有需要对word进行操作的,可以看看哈,本次使用比较强大的spire组件来对word进行操作,免费版支持三页哦,对于不止三页的word文件,可以购买收费版,官网:…

    Java 2023年6月8日
    089
  • 9大性能优化经验总结,强烈建议收藏!

    性能优化属于Java高级岗的必备技能,而且大厂特别喜欢考察,今天主要给大家介绍9种性能优化的方法@mikechen 1.代码 之所以把代码放到第一位,是因为这一点最容易引忽视,比如…

    Java 2023年6月15日
    086
  • Spring Cloud Gateway配置自定义异常返回

    0. 前言 最近搞微服务的全家桶,用到的Spring Cloud Gateway 这个组件。需要对这个网关抛出的异常进行自定义。网关的异常处理跟单体SpringBoot的全局异常处…

    Java 2023年5月30日
    067
  • Java异常

    1.异常引入 package exception; @SuppressWarnings({"all"}) /** * @Author Blueshadow * …

    Java 2023年6月8日
    084
  • Java笔记_静态变量和实例变量的区别

    这里简单做一下笔记,区分Java全局变量里的静态变量与实例变量。 1、Java里的全局变量 首先了解Java里的全局变量,也叫成员变量。 特点: (1)、一个类中既不在方法体内,也…

    Java 2023年6月5日
    0102
  • Spring5——IOC操作Bean管理(基于xml文件)

    最近在学习Spring5框架,下面关于Spring5之IOC容器管理Bean的学习笔记和心得,如有错误,欢迎指正。 学习资源: IOC容器 控制反转(IOC)。IOC容器就是具有依…

    Java 2023年6月8日
    073
  • mongodb相关

    一.删除数据库时,使用root账号执行 仍然提示没有权限 1.使用root账号创建新user并赋予权限 2.使用被赋权账号 db.dropDatabase() 二.升级过的mong…

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