在Kotlin中使用Enums | 码农家园
1.概述
在本教程中,我们将深入研究Kotlin枚举。
随着编程语言的发展,枚举的使用和应用也得到了发展。
如今,Enum常量不仅是常量的集合,它们还可以具有属性,实现接口等等。
对于Kotlin初学者,请查看有关Kotlin基础知识-Kotlin语言简介的文章。
2.基本的Kotlin枚举
让我们看一下Kotlin中枚举的基础。
2.1。定义枚举
让我们将枚举定义为具有三个描述信用卡类型的常量:
enum class CardType {
SILVER, GOLD, PLATINUM
}
2.2。初始化枚举常量
就像Java中一样,Kotlin中的枚举可以具有构造函数。由于枚举常量是Enum类的实例,因此可以通过将特定值传递给构造函数来初始化常量。
让我们为各种卡片类型指定颜色值:
enum class CardType(val color: String) {
SILVER("gray"),
GOLD("yellow"),
PLATINUM("black")
}
我们可以通过以下方式访问特定卡类型的颜色值:
val color = CardType.SILVER.color
3.枚举常量作为匿名类
我们可以通过将其创建为匿名类来定义特定的枚举常量行为。然后,常量需要覆盖Enum定义中定义的抽象函数。
例如,对于每种卡类型,我们可能有不同的现金返还计算。
让我们看看如何实现它:
enum class CardType {
SILVER {
override fun calculateCashbackPercent() = 0.25f
},
GOLD {
override fun calculateCashbackPercent() = 0.5f
},
PLATINUM {
override fun calculateCashbackPercent() = 0.75f
};
abstract fun calculateCashbackPercent(): Float
}
我们可以使用以下方法调用匿名常量类的重写方法:
1
val cashbackPercent = CardType.SILVER.calculateCashbackPercent()
4.枚举实现接口
假设有一个ICardLimit接口,它定义了各种卡类型的卡限制:
1
2
3
interface ICardLimit {
fun getCreditLimit(): Int
}
现在,让我们看看我们的枚举如何实现此接口:
enum class CardType : ICardLimit {
SILVER {
override fun getCreditLimit() = 100000
},
GOLD {
override fun getCreditLimit() = 200000
},
PLATINUM {
override fun getCreditLimit() = 300000
}
}
要访问卡类型的信用额度,我们可以使用与上一个示例相同的方法:
val creditLimit = CardType.PLATINUM.getCreditLimit()
5.常见的枚举构造
5.1。通过名称获取枚举常量
要通过其字符串名称获取枚举常量,我们使用valueOf()静态函数:
val cardType = CardType.valueOf(name.toUpperCase())
5.2。遍历枚举常量
要遍历所有枚举常量,我们使用values()静态函数:
for (cardType in CardType.values()) {
println(cardType.color)
}
5.3。静态方法
要向枚举添加"静态"函数,我们可以使用伴随对象:
companion object {
fun getCardTypeByName(name: String) = valueOf(name.toUpperCase())
}
现在,我们可以使用以下命令调用此函数:
val cardType = CardType.getCardTypeByName("SILVER")
请注意,Kotlin没有静态方法的概念。我们在这里展示的是一种获得与Java相同功能但使用Kotlin功能的方法。
六,结论
本文介绍了Kotlin语言的枚举及其主要功能。
我们介绍了一些简单的概念,例如定义枚举和初始化常量。我们还展示了一些高级功能,例如将枚举常量定义为匿名类,以及枚举实现接口。
所有这些示例和代码片段的实现都可以在GitHub项目中找到。这是一个Maven项目,因此应易于导入和运行。
参考