在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类中,但是我不确定该函数如何引用它设置为的值。
答案 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"
}
}