首页 > 解决方案 > 是否可以为 Kotlin 覆盖 ENUM 的名称?

问题描述

我的枚举如下

    enum class ImagesType(val descriptor: String) {
        BIGGER("Bigger Image - Fall"),
        SMALLER("Smaller Image - Lion"),
        TALLER("Taller Image - Tree"),
        LONGER("longer Image - Bridge")
    }

这是因为name与枚举字符相同。我希望用 覆盖namedescription以下将是正确的

我试过

    enum class ImagesType(override val name: String) {
        BIGGER("Bigger Image - Fall"),
        SMALLER("Smaller Image - Lion"),
        TALLER("Taller Image - Tree"),
        LONGER("longer Image - Bridge")
    }

但它没有说明这name是最终的。

标签: kotlinenums

解决方案


我用方式得到我想要的。

    enum class ImagesType(val descriptor: String) {
        BIGGER("Bigger Image - Fall"),
        SMALLER("Smaller Image - Lion"),
        TALLER("Taller Image - Tree"),
        LONGER("longer Image - Bridge");

        override fun toString(): String {
            return descriptor
        }

        companion object {
            fun getEnum(value: String): ImagesType {
                return values().first { it.descriptor == value }
            }
        }
    }

所以它得到了我需要的结果

  • 当我println(ImagesType.BIGGER)会打印Bigger Image - Fall
  • 当我 val x = ImagesType.getEnum("Smaller Image - Lion"),它会得到 valx = SMALLER

valueOf我通过将其替换为覆盖的一种解决方法getEnum。看起来valueOf无法覆盖。


推荐阅读