【Kotlin】枚举和印章类

101 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情

印章类

印章类又称为密封类,用来表示受限的类继承结构:当一个值为有限几种的类型, 而不能有任何其他类型时。使用sealed关键字修饰类,印章类可以有子类,但是所有的子类都必须要内嵌在印章类中

我们可以用生活中的例子来说明一下:现有母驴、公驴、公马三只动物,我们知道: 母驴+公驴=驴子 母驴+公马=骡子

我们现在创建一个Son class来形容三只动物的儿子,由于只能是驴子,或骡子,所以我们加关键字sealed

fun main(args: Array<String>) {
	var son1:Son = Son.donkey()
	var son2:Son = Son.mule()
	var son3:Son = Son.donkey()
	
	var list = listOf<Son>(son1,son2,son3)
	for(s in list){
		if(s is Son.donkey){
			s.sayHello()
		}
	}
	
}

不能直接实例Son的,因为它有关键字sealed,没有构造方法,所以这样写会报错

在这里插入图片描述

查看运行结果

大家好
大家好

枚举

kotlin 中也如Java一样,有枚举类这个类型

枚举类的定义:在某些情况下,一个类的是有限而且固定的,比如季节类、月份类、等等,这种实例有限而且固定的类,叫做枚举类

作用:在早期代码中,可能会使用静态常量表示枚举,比如下面定义的常量:

enum class Week{
	星期一,星期二,星期三,星期四,星期五,星期六,星期天
}

fun main(args:Array<String>){
	println(Week.星期一.ordinal)
	println(Week.星期天.ordinal)
}
0
6

枚举类使用关键字enum标记,enum关键字在类头中的class关键字前面

两者区别

印章类其实跟枚举是很类似的,都是限定了类型,但是它们俩还是有区别的: Sealed class 更在意类型 枚举类更在意数据