从零开始学Kotlin-枚举(9)
从零开始学Kotlin基础篇系列文章
枚举的定义
- 一个类的对象是有限且固定的,这种实例有限且固定的类称为枚举类;
- 枚举常量用逗号分隔,每个枚举常量都是一个对象;
enum class EnumDemo9 {
RED, BLUE, BLACK, WHITE
}
枚举初始化
- 每一个枚举都是枚举类的实例,它们可以被初始化;枚举类的主构造函数默认是私有的,初始化时需要在主构造函数中声明;
enum class EnumDemo91(val rgb: Int) {
RED(0xff0000),
BLUE(0x0011ff),
BLACK(0x000000),
WHITE(0xffffff),
}
枚举的使用
- EnumClass.valueOf(value: String): 由枚举值的名称获取枚举实例;未匹配成功,会抛出IllegalArgumentException
- EnumClass.values(): 以数组的形式,获取所有的枚举实例
fun main(args: Array<String>) {
var colors: Array<EnumDemo91> = EnumDemo91.values()
var redColor = EnumDemo91.valueOf("RED")
}
- 每个枚举常数值都拥有属性,获取枚举相关信息:
- val name: String //获取枚举名称
- val ordinal: Int //获取枚举值在所有枚举数组中定义的顺序
fun main(args: Array<String>) {
val redColor = EnumDemo91.valueOf("RED")
var redColorName = redColor.name
var redColorOrdinal = redColor.ordinal
}
- 自 Kotlin 1.1 起,可以使用 enumValues() 和 enumValueOf() 函数以泛型的方式访问枚举类中的常量
print(enumValues<EnumDemo91>().joinToString { it.name })//输出:RED,BLUE,BLACK,WHITE
print(enumValueOf<EnumDemo91>("RED"))//输出:RED
枚举类与接口
- 枚举类实现接口的情况与抽象方法类似,所有的枚举常量都应在其匿名类中实现接口的方法。
//定义一个接口
interface ItemClickListener {
fun onClick(msg: String)
}
//枚举类继承接口
enum class EnumDemo92 : ItemClickListener {
BUTTON {
override fun onClick(msg: String) {
print(msg)
}
},
IMAGE {
override fun onClick(msg: String) {
print(msg)
}
}
}
匿名类与抽象方法
- 枚举还支持以声明自己的匿名类及相应的方法、以及覆盖基类的方法;
- 在枚举类中声明了抽象方法,所有的枚举常量都应声明其匿名类,并在匿名类中实现枚举类中声明的抽象方法,如果不实现,编译器会报错;
- 如果枚举类定义任何成员,要使用分号将成员定义中的枚举常量定义分隔开;
- 匿名内部类中声明的方法,并不能在外部使用,即使是其枚举类型的实例,也不可调用;但重写的枚举类中声明的方法,可以被其实例调用;
enum class Person(var code: Int) {
NAME1(0) {
override fun showName(name: String): Person {
return Person.values()[0]
}
},
NAME2(1) {
override fun showName(name: String): Person = NAME2
};
abstract fun showName(name: String): Person
}
从零开始学Kotlin-枚举(9)的更多相关文章
- 从零开始学Kotlin第六课
Kotlin调用java代码: 1.如果是内部工程的类,直接调用,如果是外部的工程项目按照java的方式将jar包导入进来. 2.实例化java对象 我们之前学java的时候实例化对象是这个样子的. ...
- 从零开始学Kotlin第四课
面向对象: //妹子 性格 声音 class Girl(var chactor:String,var voice:String) fun main(args: Array<String>) ...
- 从零开始学Kotlin第七课
1.强制类型转换需要在后面加两个感叹号 2.如果需要在java代码调用kotlin的方法时候使用文件名+kt.方法 3.object 类名 是创建匿名内部类的写法 调用 传入class对象 4.在to ...
- 从零开始学Kotlin第三课
kotlin函数和函数式表达式的简化写法: fun main(args:Array<String>) { var result=add(2,5) println(result) ///简化 ...
- 从零开始学Kotlin第一课
Kotlin的方法: 一个简单的计算器: fun main(args:Array<String>){ //主函数main方法 var a=8; var b=9; println(plus( ...
- 从零开始学Kotlin第五课
函数式编程入门: package EL fun main(args: Array<String>) { var names= listOf<String>("tom& ...
- 从零开始学Kotlin第二课
字符串模板 fun main(args:Array<String>){ //主函数main方法 println(diaryGenerater("天安门")); } // ...
- 从零开始学Kotlin-扩展函数(10)
从零开始学Kotlin基础篇系列文章 什么是扩展函数 扩展函数数是指在一个类上增加一种新的行为,我们甚至没有这个类代码的访问权限: Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 ...
- 从零开始学Kotlin-泛型(8)
从零开始学Kotlin基础篇系列文章 与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼. 泛型类的基本使用 泛型,即 "参数化类型",将类型参数 ...
随机推荐
- Wannafly挑战赛27
Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...
- NOI 2018网络同步赛(游记?)
刚中考完那段时间比较无聊,报名了一个同步赛,报完名才发现成绩单是要挂到网上的,而且因为报的早给了一个很靠前的考号...那布星啊,赶紧学点东西,于是在一周内学了网络流,Treap以及一些数论. Day1 ...
- 关于java中的使用通配符错误,错误信息Diamond types are not supported at language level '5‘
当时,我问了下大神,他们问我是不是jdk问题.因为jdk8才支持这样的棱形写法.当时自己的jdk版本是jdk8,然后就奇怪了,最后我发现原来在Language level中调成了5.0 5.0不支持6 ...
- Node.js实战(九)之事件循环
Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高. Node.js 几乎每一个 API 都是支持回调函数的. Node ...
- 如何删除VS2015中的OpenCV的配置
首先,在C盘--用户--AppData--Local--Microsoft--MSBuild--v4.0 路径下,找到 Microsoft.Cpp.Win32.user 文件,用记事本打开,如下 ...
- leetcode717—1-bit and 2-bit Characters
We have two special characters. The first character can be represented by one bit 0. The second char ...
- odoo 打印单
<td style="word-wrap:break-word;width:20%;font-size:16"> <t t-foreach="l.pro ...
- Mac 如何显示隐藏文件夹并设置快捷键
通过在终端运行命令可以控制隐藏文件是否显示: 输入defaults write com.apple.finder AppleShowAllFiles NO 就不显示, 输入defaults write ...
- 在Docker中安装.NET Core(使用命令行工具)
在Docker中安装.NET Core目前共有两种方法:1,使用命令行工具安装2,使用VS2017来安装 本文主要介绍使用命令行工具来安装: 1,安装Docker(如果本机已经有Docker环境,可以 ...
- 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合
前一篇中数据源采用的是从一个socket中拿数据,有点属于“旁门左道”,正经的是从kafka等消息队列中拿数据! 主要支持的source,由官网得知如下: 获取数据的形式包括推送push和拉取pull ...