java - 使用它的值获取枚举常量

标签 java enums kotlin

<分区>

我试图使用它的值获取枚举,但它抛出了一个错误,提示 No enum constant。 eg 代码在 Kotlin 中,但在 Java 中是相同的提前致谢。

import java.util.*

enum class TaskAction constructor(val value: String) {
    ARCHIVE("Archive"), UN_FLAG("Un flag"), FLAG("Flag"), REDO("Redo"),
    READY("Ready"), EDIT("Edit"), DND("dnd"), DELETE("Delete"),
    IN_PROGRESS("In progress"), DONE("Done");
}


fun main(args: Array<String>) {
    showSomeThing(TaskAction.UN_FLAG.value)
}

fun showSomeThing(enum: String) {
    println(TaskAction.valueOf(enum))
}

日志:

Exception in thread "main" java.lang.IllegalArgumentException: No enum constant TaskAction.Un flag

最佳答案

valueOf 方法接受一个字符串,该字符串应与枚举常量的名称 相对应。但是,您提取枚举的值并尝试将其映射回常量。这不起作用,除非该值等于常量的名称。

所以您的问题是 TaskAction.UN_FLAG.value 返回 "Un flag"。然后你调用 TaskAction.valueOf("Un flag"),它找不到你提供的字符串的任何枚举常量(因为枚举常量的名称是 UN_FLAG)。

所以基本上:"Un flag"!= "UN_FLAG"

编辑:

为了解决这个问题,我会创建一个函数来根据值找到正确的枚举。我会将函数放在 TaskAction 的伴随对象中。像这样:

companion object {
  fun from(s: String): TaskAction? = values().find { it.value == s }
}

关于java - 使用它的值获取枚举常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41463508/

相关文章:

java - 我如何在 Java 中使用 JSONata?

java - 在android中读取和写入序列化对象

java - Spring存储库接口(interface): Find record using foreign key

ruby-on-rails - 相同的枚举不能在 rails 的不同列中工作

swift - "static"对枚举或结构中的常量意味着什么

android-studio - 如何在 Kotlin 文件中的 Android Studio 中控制何时将 Imports 替换为通配符

java - 如何使用 JSoup 在包含特定属性值的 div 之后添加 <br>

iphone - objective c 中创建对象和设置其属性的最佳实践是什么

android - 从 Kotlin 中的字符串中删除字符

collections - Kotlin:在 API 中公开不可变列表