java.lang.IllegalArgumentException: No enum const class 即使迭代values() 工作得很好,原因是什么?

2024-01-19

这个问题基本上是我的延伸上一个问题 https://stackoverflow.com/questions/12639038/when-do-enum-instances-get-created。我问上一个问题是为了确保在类加载时填充枚举常量。这是我的课程,添加了一个简单的方法getByName :

public enum PropName {

  CONTENTS("contents"),
  USE_QUOTES("useQuotes"),
  ONKEYDOWN("onkeydown"),
  BROWSER_ENTIRE_TABLE("browseEntireTable"),
  COLUMN_HEADINGS("columnHeadings"),
  PAGE_SIZE("pageSize"),
  POPUP_TITLE("popupTitle"),
  FILTER_COL("filterCol"),
  SQL_SELECT("sqlSelect"),
  ;

  private String name;

  private PropName(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }

  public static PropName getByName(String name){
    return   PropName.valueOf(name);
  }
}

对该方法的调用getByName("columnHeadings")正在投掷java.lang.IllegalArgumentException: No enum const class labware.web.component.limsgrid.PropName.columnHeadings但如果我用下面的代码替换这个方法,它就可以工作。

 public static PropName getByName(String name){
    for(PropName prop : values()){
      if(prop.getName().equals(name)){
        return prop;
      }
    }

    throw new IllegalArgumentException(name + " is not a valid PropName");
  }

关于我在这里做错了什么有什么想法吗?


Enum.valueOf()只检查常量名称,因此需要传递它"COLUMN_HEADINGS"而不是“列标题”。你的name属性与 Enum 内部无关。


为了解决评论中的问题/疑虑:

枚举的“内置”(隐式声明)valueOf(String name)方法将查找具有该确切名称的枚举常量。如果您的输入是“columnHeadings”,您(至少)有三个选择:

  1. 暂时忘记命名约定,只用最有意义的方式命名常量:enum PropName { contents, columnHeadings, ...}。这显然是最方便的。
  2. 在调用之前将您的驼峰式输入转换为 UPPER_SNAKE_CASEvalueOf,如果您真的喜欢命名约定。
  3. 实现您自己的查找方法而不是内置的valueOf找到输入对应的常量。如果同一组常量有多个可能的映射,则这是最有意义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.IllegalArgumentException: No enum const class 即使迭代values() 工作得很好,原因是什么? 的相关文章

  • Android Studio:clang 错误:未知参数:'-mandroid'

    我正在尝试使用 NDK 构建一个项目 但无法消除此错误 我在谷歌上进行了搜索 但只有 Xamarin 出现类似的错误 我正在使用 Android Studio 该错误的全部内容是 FAILURE Build failed with an e
  • Java 线程何时达到“死亡”状态

    在 Java 中 Die 是线程的状态之一 什么原因导致线程进入这种状态 来自线程API http java sun com javase 6 docs api java lang Thread html 这是一个完整的列表 如果 run
  • GWT 多个 html 页面和导航

    您好 首先我想提一下 我知道基于 ajax 的应用程序和同一页面的重用 这里的要求是 我想要两个单独的页面 一个用于登录 另一个用于主应用程序 现在 这并不是因为我只是想要它 而是因为我在两个页面中有非常不同的布局 我很乐意将其与 html
  • Android ListView 的 setOnItemClickListener 从 PopupWindow 未调用

    我正在尝试从 PopupWindow 显示 ListView 但是当我尝试调用 ListView 的 setOnItemClickListener 时 没有什么可做的 这里是 Java 文件 PopupWindowActivity java
  • 浏览器刷新不起作用,spring boot + React

    当我们点击浏览器刷新时 它会返回403 我正在尝试使用 WebMvcConfigurer addViewControllers 进行修复 我们正在使用 React 并更改 url 例如 在浏览器中 http localhost 8080 a
  • 如何为 Runnable 分配方法引用值

    我有一个关于 Java 8 的问题Runnable public static void main String args Runnable r1 Test t1 Runnable r2 Test t2 Runnable r3 Test t
  • 我想最小化@Transactional 的范围吗?

    不确定 范围 在这里是否是正确的术语 我使用 Spring 进行 JPA 事务管理 下面有 Hibernate 我执行数据库事务的方法是私有的 但是由于您只能在类或类上设置 Transactional公共方法 http static spr
  • 通过多个FileInputStream访问同一个文件是否安全?

    如标题所述 我想打开多个FileInputStream对象来访问同一个文件以获取不同位置的数据 这样做安全吗 谢谢 只要您所做的只是读取 并且没有任何线程 流对文件设置独占锁 那就完全没问题
  • 为什么 show log 和 svn update 的版本号不同?

    当我对一个 svn 文件夹进行更新时 它会显示最新版本 更新被视为Completed At revision 116 但是当我确实显示该文件夹的日志时 它显示最新的修订号为100在历史上 我的问题是为什么两个版本号不同步 有关信息 当我执行
  • 来自 Java 的 Apache FOP 与 XSLT 2.0...?

    我在 Apache FOP 1 0 的嵌入式使用中使用 XSLT 2 0 的某些功能时遇到问题 特别是在使用 current group 时出现异常 我看到 FOP 正在使用 xalan 2 6 它引发了异常 我尝试排除 xalan 2 6
  • Arrays.stream().map().sum() 性能不稳定

    我偶然发现了一个对原始数组进行非常简单的映射 归约操作的性能曲线极其不稳定的实例 这是我的 jmh 基准代码 OutputTimeUnit TimeUnit NANOSECONDS BenchmarkMode Mode AverageTim
  • formFactory.form() 不存在!游戏框架

    我有一个小问题 我想创建一个网络应用程序 并且我通过 java 文档学习 PlayFramework 这个示例代码 public Result hello DynamicForm requestData formFactory form b
  • 输入流的问题

    以下是我将在我的项目中使用的代码片段的一部分 public String fetchFromStream try int charVal StringBuffer sb new StringBuffer while charVal inpu
  • Elasticsearch:在 java.lang.OutOfMemoryError:Java 堆空间后重新启动节点

    我的一个 ES 节点失败了 因为java lang OutOfMemoryError Java heap space错误 这是日志中的完整堆栈跟踪 2020 09 18T04 25 04 215 WARN o e a b Transport
  • 在多线程环境下使用JUnit的奇怪问题

    在多线程环境中使用 JUnit 时 我遇到一个奇怪的问题 下面的代码应该会失败 但在eclipse中却确实通过了 public class ExampleTest extends TestCase private ExecutorServi
  • 如何在 JPasswordField 中启用剪切、复制?

    我注意到我无法剪切和复制JPasswordField 现在如何将密码的选定部分复制 剪切到剪贴板 有什么方法可以做到这一点吗 简单 用这个方法 JPasswordField jt new JPasswordField 20 Put clie
  • Android - 如何在用户级别处理 Firestore 异常?

    我在我的应用程序中使用 Firestore 但我不知道如何在用户级别处理由此引发的异常 我的意思是当发生此类异常时向用户显示什么 例如 执行任何CRUDFirestore 上的操作 DocumentReference get https f
  • Eclipse:在类路径上查找资源

    eclipse 有没有办法在类路径中搜索任意资源文件名 或模式 我知道我可以使用 Navigate gt Open Type 这将扫描类路径中的类 或 Navigate gt Open Resource 它将搜索任何资源类型 但仅在我的项目
  • 如何映射“根”Servlet 以便其他脚本仍然可以运行?

    我正在尝试构建一个调用 JSP 页面的 Servlet 类似于以下内容 public void doGet HttpServletRequest req HttpServletResponse resp throws IOException
  • Wicket+Spring+JPA+Hibernate:未找到持久性单元

    我正在使用 Wicket Spring JPA Hibernate 开发一个 Web 应用程序 这是我使用此设置的第一个项目 我想我可能犯了一些错误 我收到以下错误 找不到名为 ApplicationEntityManager 的持久性单元

随机推荐