Преобразовать элемент перечисления в соответствующий текст - PullRequest
0 голосов
/ 15 января 2019

В 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 голосов
/ 15 января 2019
enum class MediaType() {
    AUDIO,
    VIDEO,
    ARTICLE;

    fun getMemberText() = when (this) {
        AUDIO -> "mp3"
        VIDEO -> "mpeg"
        else -> "text"
    }
}
0 голосов
/ 15 января 2019

Вы можете добавить свойство в перечисление ...

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
}

Обновление:

Другой способ - добавить функцию расширения и сохранить эту логику внеenum полностью:

fun MediaType.toText(): String = 
    when(this) {
       MediaType.AUDIO -> "mp3"
       MediaType.VIDEO -> "mpeg"
       MediaType.ARTICLE -> "text"
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...