枚举属性与方法
添加行为
枚举属性与方法 是 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 反馈 — 无需本地设置。
此课程中的所有课时
- 定义枚举
- 枚举属性与方法
- 使用 when 处理枚举
- 枚举值与序数