An enum switch case label must be the unqualified name of an enumeration constant
An enum switch case label must be the unqualified name of an enumeration constant 是 Java 中常见的编译错误,基本上 Google 搜索出来的错误场景都是因为在 switch 中使用枚举时搭配了类名造成,例如:
1 | Season season = Season.SPRING; |
然而,如果某个枚举值不存在,也会提示一样的错误,例如:
1 | Season season = Season.SPRING; |
这种情况下的错误提示容易让人摸不着头脑,IntelliJ IDEA 的错误提示则较为友好:Cannot resolve symbol 'SOME_VALUE_DOES_NOT_EXIST'。对于这种错误场景,实际工作中遇到一个例子:
- 在开发阶段,
A拉了个some.package的分支,更新版本号为a.b-SNAPSHOT并发布,将其引入some.app,推送代码后触发了some.app的Jenkins构建任务 B也拉了个some.package的分支,同样更新版本号为a.b-SNAPSHOT并发布,并增加了一个新的枚举值到SomeEnum,同样将其引入some.app,推送代码后触发了some.app的Jenkins构建任务,此时任务构建失败,提示编译错误:An enum switch case label must be the unqualified name of an enumeration constant
出现这样的原因是 Jenkins 执行构建任务时执行的编译命令是 mvn compile,在 A 提交任务时,构建服务器下载了 some.package 的 a.b-SNAPSHOT 版本,由于是 SNAPSHOT 版本,在 B 提交任务时,构建服务器没有重新下载 some.package,导致服务器中的 some.package 没有 B 新增的修改,从而出现编译错误,解决方法是在编译时增加 -U 参数来强制更新 SNAPSHOT。
参考: