枚举类就是一组命名的常数,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.

枚举类的最基本的用法是实现类型安全的枚举:

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相关推荐

  1. java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum

    一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...

  2. java switch枚举类,使用枚举类enum代替switch

    使用枚举类enum代替switch 使用枚举类,能大大减少switch的代码量,提高代码阅读性 public enum TestEnum { stu1("小明", "一班 ...

  3. java枚举类Enum入门理解

    目录 枚举的定义 JDK5.0之前只能自定义枚举类 自定义枚举类的理解: JDK5.0之后enum关键字定义枚举类 区别于自定义枚举类 enum的父类Enum的常用方法 toString方法和valu ...

  4. 【Java 枚举 集合】枚举类Enum、映射EnumMap、集EnumSet

    枚举Enum.映射EnumMap.集EnumSet 一.枚举Enum 1.概述 2.介绍 ① valueOf ② values 3.分析 ※ 模仿一个枚举类 二.枚举映射 EnumMap 1.概述 2 ...

  5. java枚举类型数组_Java基础(七)泛型数组列表ArrayList与枚举类Enum

    一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...

  6. java switch enum对象_Java枚举类(enum)5种常见用法和3种内部方法,详细附代码

    文章目录 Java枚举类(enum)重点用法和内部方法,附代码 一.Java 枚举类(enum) 详解5种常见的用法 1.常量 2.支持switch 3.向枚举中添加新方法 4.覆盖枚举的方法 5.实 ...

  7. mysql查询枚举类型转换_zendframework获取数据库中枚举类enum的数据并将其转换成数组...

    在model中建立这样的模型,在其中写入获取枚举类的方法 请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 class Student extends Zend_ ...

  8. java的枚举类enum

    为什么80%的码农都做不了架构师?>>>    本文永久地址:https://my.oschina.net/bysu/blog/1540903 定义一个枚举类 public enum ...

  9. java string转enum_java枚举类Enum方法简介(valueof,value,ordinal) (转)

    Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class,   它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口.   当我们在声明一个enum类型时,我们应该注意到en ...

最新文章

  1. audio标签控制音量_html中audio标签的使用
  2. php ecos,php
  3. 2019北京高考分数分布一览表(成绩分布统计)
  4. python断言区间_断言整数在范围内
  5. php loop 语法,Loop - SegmentFault 思否
  6. 通过邮箱远程控制电脑
  7. linux zookeeper 端口号,linux下zookeeper安装
  8. pycharm汉化包
  9. Onenote 安装GEM 插件 失败~修复
  10. 思科网络学习笔记 | 路由概念
  11. 指针(指针是什么,指针和指针的类型)
  12. hibernate(lazy加载)的意思
  13. 股票中什么是总负债同比增长率,有什么作用
  14. xmanager无法连接Linux服务器,解决xmanager连接linux出错问题
  15. 免费临时网页邮箱(可丢弃式邮箱)
  16. Glove 细节介绍
  17. tk.mybatis的使用
  18. 容积卡尔曼滤波(ckf)MATLAB代码(一个ckf滤波器的子程序)
  19. 算法工程师面试题八之交叉验证
  20. Android Performance Patterns 系列视频学习记录(持续更新中)

热门文章

  1. 电子邮件传输协议解析
  2. FusionCompute存储虚拟化
  3. 轻松实现Ecshop商城多语言切换
  4. whmcs销售系统模板+购物车模板yousi_2021
  5. 计算机软件系统有两大部分组成,1、计算机软件系统一般分为(A)两大部分
  6. Ubuntu创建和编译文件
  7. 【Java】JavaSE实践项目完整版(含代码)
  8. 【游记】NOIP2017
  9. RGui下R Console无法在英文模式下输入引号问题
  10. 三相异步电动的工作过程