代码之家  ›  专栏  ›  技术社区  ›  Johann

将枚举成员转换为相应的文本

  •  1
  • Johann  · 技术社区  · 7 年前

    在Kotlin中,我有一个枚举,如下所示:

    enum class MediaType() {
        AUDIO,
        VIDEO,
        ARTICLE;
    }
    

    我想添加一个函数或一些属性,允许将枚举成员转换为相应的文本。例如:

    var mediaType = MediaType.AUDIO
    var text = mediaType.toText() // returns the string "MP3"
    
    mediaType = MediaType.VIDEO
    text = mediaType.toText() // returns the string "mpeg"
    

    虽然我可以将toText函数添加到MediaType类中,但我不确定该函数如何引用它设置为的值。

    2 回复  |  直到 7 年前
        1
  •  6
  •   Todd    7 年前

    您可以将属性添加到枚举。。。

    enum class MediaType(val text: String) {
        AUDIO("mp3"),
        VIDEO("mpeg"),
        ARTICLE("text");
    }
    

    println(MediaType.AUDIO.text)
    

    如果你想要一个 toText()

    enum class MediaType(private val text: String) {
        AUDIO("mp3"),
        VIDEO("mpeg"),
        ARTICLE("text");
    
        fun toText(): String = text
    }
    

    更新:

    fun MediaType.toText(): String = 
        when(this) {
           MediaType.AUDIO -> "mp3"
           MediaType.VIDEO -> "mpeg"
           MediaType.ARTICLE -> "text"
        }
    
        2
  •  1
  •   Johann    7 年前
    enum class MediaType() {
        AUDIO,
        VIDEO,
        ARTICLE;
    
        fun getMemberText() = when (this) {
            AUDIO -> "mp3"
            VIDEO -> "mpeg"
            else -> "text"
        }
    }