枚举

QuibblerQuibbler 2020-06-14 约 6 分钟 1764 次阅读

枚举

1、枚举类

Kotlin中也有枚举,而且是仅此唯一一个定义比Java“复杂”的结构。Java中定义一个枚举只需要enum关键字,Kotlin中需要enum class两个一起才行。

1.1、定义枚举类

定义类时用enum软关键字声明这个类是一个枚举类。为什么叫软关键字,因为Kotlin中enum只有和class在一起才有用,其它时候可以作为变量名使用。关键字是不可以作为变量名的,比如class,可以用clazz或aClass名替代。

例:

enum class Fruit {
    APPLE,
    BANANA,
    GRAPE,
    LEMON,
    OLIVE;
}

1.2、枚举构造器

可以给枚举定义有参数的构造器,枚举类中的每个枚举实例都需要调用构造器才能初始化。

例:

enum class Fruit(var num: Int) {//同时还定义了一个num成员
    APPLE(1),
    BANANA(2),
    GRAPE(3),
    LEMON(4),
    OLIVE(5);
}

定义COLOR颜色枚举

enum class COLOR(val red: Int, val green: Int, val blue: Int) {
    RED(255, 0, 0), ORANGE(255, 1165, 0), YELLOW(255, 255, 0),
    GREEN(0, 255, 0), BLUE(0, 0, 255), VIOLET(238, 130, 238);
}

2、隐藏的方法

枚举类具有合成方法,允许遍历定义的枚举常量,并通过其名称获取枚举常数。

2.1、values()

获取枚举类中的所有枚举值。

例:

//打印Fruit枚举类中的所有枚举值
    for (value in Fruit.values()) {
        println(value)
    }

2.2、valueOf(value:String)

将指定String类型的枚举名称转换为枚举类中的枚举值

enum class Fruit(var num: Int) {
    APPLE(1),
}

//获取名称为"APPLE"的枚举值
var en = Fruit.valueOf("APPLE")

注意,如果传入的String名称错误,不存在该枚举值,则会抛出IllegalArgumentException异常。

        Exception in thread "main" java.lang.IllegalArgumentException: No enum constant main.Fruit.APP1LE
            at java.lang.Enum.valueOf(Enum.java:238)
            at main.Fruit.valueOf(HelloKotlin.kt)
            at main.HelloKotlinKt.main(HelloKotlin.kt:6)

3、定义方法

枚举类中可以定义方法。要在枚举中定义方法,就要使用封号 ;把枚举常量列表和方法定义分开。这是Kotlin中唯一用到封号的地方!

例:

enum class Fruit(var num: Int) {
    APPLE(1),
    BANANA(2),
    GRAPE(3),
    LEMON(4),
    OLIVE(5);
    fun getType(): Int {
        return num
    }
}

每个枚举实现可以重写枚举类中的方法,当然前提是定义为open方法。

例:

enum class Fruit(var num: Int) {
    APPLE(1) {
        //APPLE枚举重写覆盖方法
        override fun getType(): Int {
            return num * num
        }
    };
    
    //枚举类中定义公共的方法
    open fun getType(): Int {
        return num
    }
}

方法还可以是抽象的,这样需要每个枚举实例都去实现该方法。

例:

enum class Fruit(var num: Int) {
    APPLE(1) {
        //每个枚举对象都需要实现枚举类中的抽象方法
        override fun getType(): Int {
            return num
        }
    };
    
    //枚举类中定义的抽象方法
    abstract fun getType(): Int
}

学习资料:

        Kotlin 枚举类

相关推荐

Parcelize:Parcelable 实现生成器
Kotlin

Parcelize:Parcelable 实现生成器

Parcelize:Parcelable 实现生成器Parcelable是安卓开发中常用的序列化方式,之前分享过一个Parcelable序列化插件,方便开发者快速生成代码,提高开发效率。1、Parcelize插件Kotlin官方也推出一个Parcelable自动生成的Gradle插件:Parcelize。1.1、引入插件在项目的build.gradle中添加:id("kotlin-parceliz

2.6k
Kotlin的继承
Kotlin

Kotlin的继承

Kotlin的继承1、超类:Any类似于Java中的Object类,Kotlin也有一个叫Any的超类,是所有类的父类,所有类都默认继承自该类。超类的定义如下,其中定义了三个函数:2、open注意上面的Any类用open修饰,表示该类可以被继承。Kotlin中的类默认都是final的,无法被继承:如果想让类可以被继承,就需要用在定义类的地方用open关键字标识该类可以被继承。3、构造器继承中涉及到

2.1k
 Kotlin基本语法
Kotlin

Kotlin基本语法

Kotlin基本语法了解Kotlin语言的基本语法。1、包kotlin文件以.kt结尾,编译文件还是如此只不过在文件名后面加上Kt后缀。这一点和Java不同,Java源文件.java,编译后为.class文件。1.1、包定义每个kotlin文件的第一行就用关键字package定义该文件所在的包。例:1.2、导包用到其它kotlin文件需要使用关键字import导入,这一点和Java一样。kotli

2.1k