美文网首页
Kotlin面向对象之枚举类(Enum Classes)

Kotlin面向对象之枚举类(Enum Classes)

作者: 已迁至知乎_此不再维护 | 来源:发表于2017-05-27 08:59 被阅读0次

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

enum class Direction {
    NORTH, SOUTH, WEST, EAST
}

枚举常量是一个对象。枚举常量之间以逗号分隔。

初始化(Initialization)

由于每一个枚举值都是枚举类的实例,因此它们可以如此实例化:

enum class Color(val rgb: Int) {
        RED(0xFF0000),
        GREEN(0x00FF00),
        BLUE(0x0000FF)
}

匿名类(Anonymous Classes)

枚举常量也可以声明它们自己的匿名类:

enum class ProtocolState {
    WAITING {
        override fun signal() = TALKING
    },

    TALKING {
        override fun signal() = WAITING
    };

    abstract fun signal(): ProtocolState
}

可以具有相应的方法,也可以重写基本方法。请注意,如果枚举类定义任何成员,则需要使用分号将枚举常量定义与成员定义分开,就像在Java中一样。

使用枚举常量(Working with Enum Constants)

就像Java一样,Kotlin中的枚举类具有合成方法,允许遍历定义的枚举常量,并通过其名称获取枚举常数。 这些方法的签名如下(假设枚举类的名称为EnumClass):

EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>

在使用valueOf()方法的时候,如果定义的所有的枚举常量都没有匹配到给定的名称,则将抛出IllegalArgumentException

从Kotlin1.1开始,可以通过泛型方法获取枚举类的常量,使用enumValues<T>()enumValueOf<T>()函数:

enum class RGB { RED, GREEN, BLUE }

inline fun <reified T : Enum<T>> printAllValues() {
    print(enumValues<T>().joinToString { it.name })
}

printAllValues<RGB>() // prints RED, GREEN, BLUE

每个枚举常量都有属性可以在枚举类声明中获取其名称和位置:

val name: String
val ordinal: Int

枚举常量也可以实现Comparable接口,自然顺序则是在枚举类中定义它们的顺序。

相关文章

  • Kotlin面向对象之枚举类(Enum Classes)

    枚举类的最基本用法是实现类型安全的枚举 枚举常量是一个对象。枚举常量之间以逗号分隔。 初始化(Initializa...

  • Kotlin学习笔记之 11 枚举类

    11.Kotlin 枚举类 枚举类初始化关键字是enum,kotlin中的枚举类初始化可以有参数,比如:enum ...

  • 12.枚举

    由enum修饰的类 kotlin中枚举类可以有构造器以及成员方法 kotlin中enum类提供一些内置成员属性和方...

  • Kotlin面向对象 (6)枚举类

    枚举类构造函数枚举常用属性和函数 kotlin 中使用 enum 和 class 两个关键词声明枚举类。 枚举类使...

  • Kotlin面向对象之数据类(Data Classes)

    我们经常会创建一个除了持有数据,而没有其他用途的类。在这样一个类中,一些标准的函数(setter、getter等)...

  • Kotlin面向对象之封闭类(Sealed Classes)

    封闭类用于反应被限制了的类层次结构:一个值的类型只能是有限集合中的一种,而不能是集合外的其他类型。它们在某种意义上...

  • Kotlin面向对象之嵌套类(Nested Classes)

    一个类可以嵌套在其他类的内部: 内部类(Inner classes) 类可以被标记为inner以能够访问外部类的成...

  • kotlin 枚举类Enum

    枚举类,代数类型学习笔记###

  • 枚举

    如何定义枚举类 什么枚举类:类里的对象是有限个,可以枚举出来 如何使用enum定义枚举类 枚举...

  • 注解

    定义注解 Kotlin使用 annotation class 关键字(就像使用 enum class 定义枚举类一...

网友评论

      本文标题:Kotlin面向对象之枚举类(Enum Classes)

      本文链接:https://www.haomeiwen.com/subject/fniffxtx.html