0Pricing
Kotlin Academy · 课时

枚举属性与方法

添加行为

枚举属性与方法 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。

枚举可以携带数据

枚举常量可以携带属性。请在枚举类上声明构造函数,并在列出每个常量时传入值。

enum class Coin(val cents: Int) {
    PENNY(1), NICKEL(5), DIME(10)
}

fun main() {
    println(Coin.DIME.cents)
}

构造函数参数

每个常量后圆括号中的值都是枚举构造函数的参数。它们会成为该常量的只读属性。

enum class Planet(val gravity: Double) {
    EARTH(9.8), MOON(1.6)
}

fun main() {
    println(Planet.MOON.gravity)
}

多个属性

枚举可以同时声明多个属性。

enum class Fruit(val color: String, val calories: Int) {
    APPLE("red", 95),
    BANANA("yellow", 105)
}

fun main() {
    val f = Fruit.BANANA
    println("${f.color} ${f.calories}")
}

添加方法

您可以在枚举体中声明普通函数。每个常量都共享这些函数。

enum class Temp(val celsius: Int) {
    COLD(5), WARM(25);

    fun toFahrenheit(): Int = celsius * 9 / 5 + 32
}

fun main() {
    println(Temp.WARM.toFahrenheit())
}

分号规则

当枚举除了常量之外还包含成员(方法或属性)时,必须在最后一个常量后添加分号。

enum class Op {
    ADD, SUB;

    fun describe() = "Operation: $name"
}

fun main() {
    println(Op.ADD.describe())
}

每个常量实现抽象方法

枚举可以声明抽象方法,并由每个常量重写,从而让每个常量拥有自己的行为。

enum class Math {
    PLUS { override fun apply(a: Int, b: Int) = a + b },
    TIMES { override fun apply(a: Int, b: Int) = a * b };

    abstract fun apply(a: Int, b: Int): Int
}

fun main() {
    println(Math.TIMES.apply(3, 4))
}

计算属性

属性获取器可以根据常量的数据计算值。

enum class Account(val balance: Int) {
    SAVINGS(1000), CHECKING(50);

    val isRich: Boolean get() = balance > 500
}

fun main() {
    println(Account.SAVINGS.isRich)
}

结合数据与行为

属性加上方法,可以让枚举表示一个丰富而封闭的领域。

enum class Shape(val sides: Int) {
    TRIANGLE(3), SQUARE(4);

    fun describe() = "$name has $sides sides"
}

fun main() {
    println(Shape.SQUARE.describe())
}

在逻辑中使用属性

常量属性在计算和条件判断中非常实用。

enum class Tier(val discount: Int) {
    BRONZE(5), GOLD(20)
}

fun price(base: Int, tier: Tier) = base - base * tier.discount / 100

fun main() {
    println(price(100, Tier.GOLD))
}

属性的默认值

枚举构造函数和其他构造函数一样支持默认参数值。

enum class Role(val canEdit: Boolean = false) {
    VIEWER, EDITOR(true)
}

fun main() {
    println(Role.VIEWER.canEdit)
    println(Role.EDITOR.canEdit)
}

完整模型

这里的枚举同时使用数据和行为表示超文本传输协议状态。

enum class Http(val code: Int) {
    OK(200), NOT_FOUND(404);

    fun isError() = code >= 400
}

fun main() {
    println(Http.NOT_FOUND.isError())
}

快速检查

测试您对枚举属性和方法的理解。

回顾

您已经学会让枚举携带行为:

  • 添加构造函数,为常量提供属性。
  • 声明共享方法(常量后使用分号)。
  • 抽象方法让每个常量定义自己的行为。
  • 计算属性和带默认值的属性都可以照常使用。
enum class Coin(val cents: Int) {
    PENNY(1), DIME(10);
    fun double() = cents * 2
}

fun main() {
    println(Coin.DIME.double())
}

常见问题解答

「枚举属性与方法」课时是免费的吗?

是的 — 「枚举属性与方法」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。

「枚举属性与方法」这节课中我会学到什么?

添加行为 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kotlin Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「枚举属性与方法」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kotlin Academy 课中编写并运行代码吗?

能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 定义枚举
  2. 枚举属性与方法
  3. 使用 when 处理枚举
  4. 枚举值与序数
← 返回 Kotlin Academy