我是Kotlin的新手,我try 了enum类,我发现这3个方法返回的是相同的东西.

package com.example.test1

fun main() {
    println(Direction.valueOf("NORTH")) // print NORTH
    println(Direction.NORTH)            // print NORTH
    println(Direction.NORTH.name)       // print NORTH
}

enum class Direction(var direction: String, var distance: Int) {
    NORTH("North", 20),
    SOUTH("South", 30),
    EAST("East", 10),
    WEST("West", 15);
}

它们的用途有什么不同?

推荐答案

  • Direction.valueOf("NORTH")返回枚举类Direction的值,乘以name.当您调用println时,它隐式调用toString方法(每个Kotlin对象都隐式实现).enum classtoString默认实现是enum的名称.如果需要,您可以重写此方法.

  • Direction.NORTH它是实际的枚举实例.就像我之前写的,println隐式调用toString方法

  • Direction.NORTH.name返回String类型的name字段.它是一个特殊的字段,每个enum class都有,那就是返回它的名字

例如,如果您按如下方式更改enum class:

enum class Direction(var direction: String, var distance: Int) {
    NORTH("North", 20),
    SOUTH("South", 30),
    EAST("East", 10),
    WEST("West", 15);

    override fun toString(): String {
        return this.name.lowercase()
    }
}

前两张照片将是"north"

Kotlin相关问答推荐

UByte范围. Min_UTE.. UByte.MAX_UTE不符合预期

Kotlin协程挂起继续线程

Kotlin 海峡没有结束

Kotlin编译器如何决定是否可以在任何给定点调用Suspend方法?

TzdbZoneRulesProvider 在 java.time 中不工作

Kotlin RxJava 可空的错误

如何有效地填充 Gradle Kotlin DSL 中的额外属性?

如何将超过 2 个 api 调用的结果与 Coroutines Flow 结合起来?

API 'variant.getJavaCompile()' 已过时

Kotlin 类的调用方法

kotlin:扩展方法和空接收器

如何将 Kotlin 日期中的字符串或时间戳格式化为指定的首选格式?

Kotlin 的 Double.toInt() 中使用了哪种方法,舍入还是截断?

Android 上的 Kotlin:将map到list

无法解决:androidx.lifecycle:lifecycle-extensions-ktx:2.0.0-alpha1

android Room 将 Null 作为非 Null 类型返回

通过在 kotlin-gradle 中使用子项目Unresolved reference: implementation

项目不会使用 Kotlin 1.1.3 构建

从 Kotlin 访问 Integer.class

Kotlin 中的填充字符串