Kotlin —  Sealed Classes(密封类)

我先翻译为密封类吧O__O "…。

什么是密封类?

官方文档:密封类用于表示受限类的层次结构,当一个值有一个有限的类型,但不能有任何其他类型。它们在某种意义上是枚举类的扩展:枚举类型的值的集合也受到限制,但是每个枚举常量只能作为一个单独的实例存在,而一个密封类的子类可以有多个可以包含状态的实例。

如何声明密封类?

只需要在class前面添加关键字sealed

sealed class Person{
    data class YellowPerson(val name:String):Person()
    data class WhitePerson(val name:String,age:Int):Person()
    object BlackCat:Person()
}

当在表达式中使用它们时,密封类的便捷就会体现出来。如果需要验证语句是否涵盖所有的情况,则不需要在语句中添加else。

fun name(person:Person):String=when(person){
  is Person.YellowPerson->person.name
  is Person.WhitePerson->person.name+person.age
  Person.BlackCat->Not A Person
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java爬坑系列

【Java入门提高篇】Day14 Java中的泛型初探

  泛型是一个很有意思也很重要的概念,本篇将简单介绍Java中的泛型特性,主要从以下角度讲解:   1.什么是泛型。   2.如何使用泛型。   3.泛型的好处...

3066
来自专栏我叫刘半仙

原荐你知道么?static关键字有5种用法。

     说到static,静态变量和静态方法大家随口就来,因为他们在实际开发中应用很广泛,但他们真正在使用的时候会存在很多问题,而且它的使用不只那两种:   ...

3716
来自专栏java系列博客

单例模式的各种实现

1746
来自专栏菩提树下的杨过

装箱与值类型虽然很容易理解,但是在实际使用中,并不总是能100%用对

public struct Point { private int m_x, m_y; public Poi...

1836
来自专栏技术专栏

慕课网高并发实战(六)- 线程安全策略

ThreadLocal 实例保存登录用户信息 (具体的业务场景,和拦截器的使用就不赘述了,大家可以购买课程详细学习)

872
来自专栏武军超python专栏

2018年7月27日python面向对象中的继承

函数式开发和面向对象的开发的区别: 函数式开发在每次调用的时候都需要给参数传参, 而面向对象的开发,可以把函数定义在类型里面叫做方法,只需要在创建对象的时候...

723
来自专栏有趣的Python

慕课网-C++远征之继承篇(下)-学习笔记

C++远征之继承篇(下) 多继承与多重继承 多重继承: ? 多重继承 ? 多重继承-Is-a关系 class Person { }; class Soldie...

3719
来自专栏互联网开发者交流社区

面向对象的Java实现

1-1:封装 a.为什么需要封装(封装可以是数据方便维护、增加实用性、方便扩展等等。通过面向对象的思想,模拟现实生活中的事物。) b.什么是封装(封装就是将...

601
来自专栏Python爬虫实战

设计模式:单例模式

想想一下这个场景,一个系统中可以存在多个打印任务,但是只有一个正在工作的任务。我们怎样才能保证一个类只有一个实例并且这个实例易于被访问呢?一个全局变量可以使得一...

632
来自专栏编码前线

在java中String类为什么要设计成final?

String很多实用的特性,比如说“不可变性”,是工程师精心设计的艺术品!艺术品易碎!用final就是拒绝继承,防止世界被熊孩子破坏,维护世界和平!

652

扫码关注云+社区