Kotlin 全面学习之路 (十二) --枚举类

在对 密封类 的学习过程中我们知道两者之间有所相同,那就具体学习一下 Kotlin 中的枚举类。

1. 基本实现

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

每一个枚举常量都是一个对象,枚举常量间使用逗号分隔。

2. 枚举初始化

enum class OzWitch(val des: String) {
    WEST("west"),
    NORTH("north"),
    EAST("east"),
    SOUTH("south");
}

枚举类的每一个枚举常量都是枚举类的实例,所以可以如上所示通过 构造函数 进行初始化。

3. 向枚举类中添加方法

除了不能继承一个 enum 外,我们基本可以把 enum 看作一个常规的类,我们可以向 enum 添加方法。

enum class OzWitch(var des: String) {
    WEST("west"),
    NORTH("north"),
    EAST("east"),
    SOUTH("south");

    fun allData(): String? {
        for (it in values())
            des += it
        return des
    }
}

具体调用:

object Main {
    @JvmStatic
    fun main(args: Array<String>) {
        for(it in OzWitch.values()){
            println(it)
            println(it.allData())
        }
    }
}

正常打印日志如下:

WEST
westWESTNORTHEASTSOUTH
NORTH
northWESTNORTHEASTSOUTH
EAST
eastWESTNORTHEASTSOUTH
SOUTH
southWESTNORTHEASTSOUTH

从打印结果来看,每一个枚举常量实例都会调用相同的方法、行为(其具体逻辑也是相同的)。

如何加载自己的逻辑?有两种方法:

  1. 匿名类
  2. 接口实现

4. 匿名类

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

  • OzWitch
enum class OzWitch(var des: String) {
    WEST("west") {
        override fun showDes() {
            println("i am ${des}")
        }
    },
    NORTH("north") {
        override fun showDes() {
            println("i am ${des}")
        }
    },
    EAST("east") {
        override fun showDes() {
            println("i am ${des}")
        }
    },
    SOUTH("south") {
        override fun showDes() {
            println("i am ${des}")
        }
    };

    abstract fun showDes()
}

  • Main
object Main {
    @JvmStatic
    fun main(args: Array<String>) {
        for(it in Location.values()){
            println(it)
            it.setStr()
        }
    }
}
  • 打印日志
NORTH
i am north
SOUTH
i am south
EAST
i am east
WEST
i am west

枚举类的每个实例对象都执行了自己相应的方法逻辑。

5.枚举实现接口

  • Info
interface Info {
    fun showInfo():String
}
  • OzWitch
enum class OzWitch(var des: String):Info {
    WEST("west") {
        override fun showInfo(): String {
            return "i am ${des}"
        }
    },
    EAST("east") {
        override fun showInfo(): String {
            return "i am ${des}"
        }
    },
    SOUTH("south") {
        override fun showInfo(): String {
            return "i am ${des}"
        }
    },
    NORTH("north") {
        override fun showInfo(): String {
            return "i am ${des}"
        }
    };
}
  • Main
object Main {
    @JvmStatic
    fun main(args: Array<String>) {

        for(it in OzWitch.values()){
            println(it)
            println(it.showInfo())
        }
    }
}

  • 日志打印
WEST
i am west
EAST
i am east
SOUTH
i am south
NORTH
i am north

枚举类的每个实例对象都执行了自己相应的方法逻辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值