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

时间:2019-01-15 14:26:24

标签: kotlin

在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 个答案:

答案 0 :(得分:6)

您可以向枚举添加属性...

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"
    }

答案 1 :(得分:1)

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

    fun getMemberText() = when (this) {
        AUDIO -> "mp3"
        VIDEO -> "mpeg"
        else -> "text"
    }
}