Kotlin 枚举类 enum
枚举类就是一组命名的常数,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.
枚举类的最基本的用法是实现类型安全的枚举:
enum class Direction {NORTH, SOUTH, WEST, EAST
}
每个枚举常量都是一个对象。枚举常量用逗号分隔。
那枚举类怎么用呢?
println(Direction.EAST.name)打印结果:EAST
用 .name 就直接拿到枚举常量本身的字符串。
每个枚举常量都具有在枚举类声明中获取其名称与位置的属性:
val name: String
val ordinal: Int
就是说每个枚举类中的常量都可以 .name 拿到名称, .ordinal 拿到位置。
==========================================================================
那枚举如何使用 Int,boolean等其他类型呢?你可以使用参数初始化枚举类
enum class Season(val temperature: Int) {SPRING(1),SUMMER(2),AUTUMN(3),WINTER(4),}println("name: ${Season.SPRING.name} , temperature: ${Season.SPRING.temperature}")打印结果:
name: SPRING , temperature: 1
enum class Week(val index: Int, val aliasName: String) {MONDAY(1, "Mon"),TUESDAY(2, "Tue"),WEDNESDAY(3, "Wed"),THURSDAY(4, "Thu"),FRIDAY(5, "Fri"),SATURDAY(6, "Sat"),SUNDAY(7, "Sun")
}println("${Week.MONDAY.name} : " +" index ${Week.MONDAY.index} , aliasName: ${Week.MONDAY.aliasName}")
打印结果:
MONDAY : index 1 , aliasName: Mon
==========================================================================
枚举类可以实现接口
interface MyInterface1 {fun myMethod1(num: Int)
}interface MyInterface2 {fun myMethod2(num: Int)
}enum class MyEnumClass : MyInterface1, MyInterface2 {OPERATE1 {override fun myMethod2() {println("OPERATE1 对 myMethod2 的特殊实现 ")}},OPERATE2 {override fun myMethod2() {println("OPERATE2 对 myMethod2 的特殊实现 ")}};override fun myMethod1() {println("MyEnumClass 对 myMethod1 的统一实现 ")}}主函数
fun main() {MyEnumClass.OPERATE1.myMethod1()MyEnumClass.OPERATE2.myMethod1()MyEnumClass.OPERATE1.myMethod2()MyEnumClass.OPERATE2.myMethod2()}
打印结果:
D:\AndroidStudio\android-studio\jre\bin\java.exe
MyEnumClass 对 myMethod1 的统一实现
MyEnumClass 对 myMethod1 的统一实现
OPERATE1 对 myMethod2 的特殊实现
OPERATE2 对 myMethod2 的特殊实现 Process finished with exit code 0
myMethod1 是在 MyEnumClass 中统一实现的,OPERATE1,OPERATE2 没有自己实现,但是也是可以调用的。
myMethod2 是在 OPERATE1,OPERATE2 中有不同的处理。
那如果 myMethod1 在 MyEnumClass 中有统一实现,那 OPERATE1 或者 OPERATE2 还可不可以重载 myMethod1呢?
答案是可以,在调用的时候会执行自己的特殊实现,而不会执行 MyEnumClass中的统一实现
interface MyInterface1 {fun myMethod1(num: Int)
}interface MyInterface2 {fun myMethod2(num: Int)
}enum class MyEnumClass : MyInterface1, MyInterface2 {OPERATE1 {override fun myMethod2() {println("OPERATE1 对 myMethod2 的特殊实现 ")}},OPERATE2 {这里也实现了 myMethod1override fun myMethod1() {println("OPERATE2 对 myMethod1 的特殊实现 ")}override fun myMethod2() {println("OPERATE2 对 myMethod2 的特殊实现 ")}};override fun myMethod1() {println("MyEnumClass 对 myMethod1 的统一实现 ")}}主函数
fun main() {MyEnumClass.OPERATE1.myMethod1()MyEnumClass.OPERATE2.myMethod1()MyEnumClass.OPERATE1.myMethod2()MyEnumClass.OPERATE2.myMethod2()}
打印结果:
D:\AndroidStudio\android-studio\jre\bin\java.exe
MyEnumClass 对 myMethod1 的统一实现
OPERATE2 对 myMethod1 的特殊实现
OPERATE1 对 myMethod2 的特殊实现
OPERATE2 对 myMethod2 的特殊实现 Process finished with exit code 0
OPERATE2 在调用myMethod1 的时候打印结果变成: OPERATE2 对 myMethod1 的特殊实现
==========================================================================
Kotlin 枚举类 enum相关推荐
- java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum
一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...
- java switch枚举类,使用枚举类enum代替switch
使用枚举类enum代替switch 使用枚举类,能大大减少switch的代码量,提高代码阅读性 public enum TestEnum { stu1("小明", "一班 ...
- java枚举类Enum入门理解
目录 枚举的定义 JDK5.0之前只能自定义枚举类 自定义枚举类的理解: JDK5.0之后enum关键字定义枚举类 区别于自定义枚举类 enum的父类Enum的常用方法 toString方法和valu ...
- 【Java 枚举 集合】枚举类Enum、映射EnumMap、集EnumSet
枚举Enum.映射EnumMap.集EnumSet 一.枚举Enum 1.概述 2.介绍 ① valueOf ② values 3.分析 ※ 模仿一个枚举类 二.枚举映射 EnumMap 1.概述 2 ...
- java枚举类型数组_Java基础(七)泛型数组列表ArrayList与枚举类Enum
一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...
- java switch enum对象_Java枚举类(enum)5种常见用法和3种内部方法,详细附代码
文章目录 Java枚举类(enum)重点用法和内部方法,附代码 一.Java 枚举类(enum) 详解5种常见的用法 1.常量 2.支持switch 3.向枚举中添加新方法 4.覆盖枚举的方法 5.实 ...
- mysql查询枚举类型转换_zendframework获取数据库中枚举类enum的数据并将其转换成数组...
在model中建立这样的模型,在其中写入获取枚举类的方法 请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 class Student extends Zend_ ...
- java的枚举类enum
为什么80%的码农都做不了架构师?>>> 本文永久地址:https://my.oschina.net/bysu/blog/1540903 定义一个枚举类 public enum ...
- java string转enum_java枚举类Enum方法简介(valueof,value,ordinal) (转)
Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口. 当我们在声明一个enum类型时,我们应该注意到en ...
最新文章
- audio标签控制音量_html中audio标签的使用
- php ecos,php
- 2019北京高考分数分布一览表(成绩分布统计)
- python断言区间_断言整数在范围内
- php loop 语法,Loop - SegmentFault 思否
- 通过邮箱远程控制电脑
- linux zookeeper 端口号,linux下zookeeper安装
- pycharm汉化包
- Onenote 安装GEM 插件 失败~修复
- 思科网络学习笔记 | 路由概念
- 指针(指针是什么,指针和指针的类型)
- hibernate(lazy加载)的意思
- 股票中什么是总负债同比增长率,有什么作用
- xmanager无法连接Linux服务器,解决xmanager连接linux出错问题
- 免费临时网页邮箱(可丢弃式邮箱)
- Glove 细节介绍
- tk.mybatis的使用
- 容积卡尔曼滤波(ckf)MATLAB代码(一个ckf滤波器的子程序)
- 算法工程师面试题八之交叉验证
- Android Performance Patterns 系列视频学习记录(持续更新中)