从零开始学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)的更多相关文章

  1. 从零开始学Kotlin第六课

    Kotlin调用java代码: 1.如果是内部工程的类,直接调用,如果是外部的工程项目按照java的方式将jar包导入进来. 2.实例化java对象 我们之前学java的时候实例化对象是这个样子的. ...

  2. 从零开始学Kotlin第四课

    面向对象: //妹子 性格 声音 class Girl(var chactor:String,var voice:String) fun main(args: Array<String>) ...

  3. 从零开始学Kotlin第七课

    1.强制类型转换需要在后面加两个感叹号 2.如果需要在java代码调用kotlin的方法时候使用文件名+kt.方法 3.object 类名 是创建匿名内部类的写法 调用 传入class对象 4.在to ...

  4. 从零开始学Kotlin第三课

    kotlin函数和函数式表达式的简化写法: fun main(args:Array<String>) { var result=add(2,5) println(result) ///简化 ...

  5. 从零开始学Kotlin第一课

    Kotlin的方法: 一个简单的计算器: fun main(args:Array<String>){ //主函数main方法 var a=8; var b=9; println(plus( ...

  6. 从零开始学Kotlin第五课

    函数式编程入门: package EL fun main(args: Array<String>) { var names= listOf<String>("tom& ...

  7. 从零开始学Kotlin第二课

    字符串模板 fun main(args:Array<String>){ //主函数main方法 println(diaryGenerater("天安门")); } // ...

  8. 从零开始学Kotlin-扩展函数(10)

    从零开始学Kotlin基础篇系列文章 什么是扩展函数 扩展函数数是指在一个类上增加一种新的行为,我们甚至没有这个类代码的访问权限: Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 ...

  9. 从零开始学Kotlin-泛型(8)

    从零开始学Kotlin基础篇系列文章 与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼. 泛型类的基本使用 泛型,即 "参数化类型",将类型参数 ...

随机推荐

  1. Postman-自动化传参

    一,自动化传参 在实现接口自动测试的时候,会经常遇到接口参数依赖的问题,例如调取登录接口的时候,需要先获取登录的key值,而每次请求返回的key值又是不一样的,那么这种情况下,要实现接口的自动化,就要 ...

  2. MP实战系列(十四)之分页使用

    MyBatis Plus的分页,有插件式的,也有其自带了,插件需要配置,说麻烦也不是特别麻烦,不过觉得现有的MyBatis Plus足以解决,就懒得配置插件了. MyBatis Plus的资料不算是太 ...

  3. Const vs. Readonly

    Const 被const修饰的变量不能为静态,因为const实际隐式上已经是静态变量. const变量在声明时就必须进行初始化,否则会有编译错误. const变量的赋值是发生在编译期间 Readonl ...

  4. JAVA框架 Spring 和Mybatis整合(动态代理)

    一.使用传统方式的dao的书写方式,不建议.目前采用的是动态代理的方式交给mybatis进行处理. 首先回顾下动态代理要求: 1)子配置文件的中,namespace需要是接口的全路径,id是接口的方法 ...

  5. HDU1166

    https://vjudge.net/contest/66989#problem/A C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直 ...

  6. java剪辑音频

    用来剪辑特定长度的音频,并将它们混剪在一起,大体思路是这样的: 1. 使用 FileInputStream 输入两个音频 2. 使用 FileInputStream的skip(long n) 方法跳过 ...

  7. oracle 将字符串转化为数值型to_number()

    select to_number('22.222') from dual

  8. 转自:strcmp函数实现及详解

    strcmp函数是C/C++中基本的函数,它对两个字符串进行比较,然后返回比较结果,函数形式如下:int strcmp(constchar*str1,constchar*str2);其中str1和st ...

  9. 关于EL表达式中requestScope和param区别

    今天演示EL表达式的时候发现自己jsp的基础实在是薄弱,在这个很简单的问题上迷惑了很久. 首先在看遇到的问题: 在浏览器地址输入,表示传入一个参数test,值为123 http://localhost ...

  10. 现有工程中集成Cordova

    cocoapods引入cordova源码 1.依赖Cordova和wk插件 pod 'Cordova' pod 'cordova-plugin-wkwebview-engine' 建立Cordova支 ...