java - 枚举抛出 "Is Not An Enum Type"

标签 java enums

我在生产和开发版本中使用 java 1.6.0_41。 然而,在生产中这一行,即 valueOf():

List<Identifier> identifiers = new ArrayList<Identifier>(); identifiers.add(Identifier.valueOf(key));

抛出不是枚举。标识符是一个枚举。

这是堆栈跟踪。

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: com.core.datamodel.Identifier is not an enum type at java.lang.Class.enumConstantDirectory(Unknown Source) at java.lang.Enum.valueOf(Unknown Source) <Break in method call trace. Could be due to JIT compiler inlining of method.>

我们使用 zkm 作为混淆器,所以也许这就是问题所在?

public enum Identifier {FOO}

我传入一个关键字符串FOO并希望得到Identifier.FOO

最佳答案

混淆器可能已重命名(甚至删除)内部需要由枚举类使用反射调用的方法。如果方法被重命名,反射将不再起作用。

您应该尝试在没有混淆器的情况下编译并运行代码。如果这有效,您可以尝试通过excluding来缩小原因范围。只有枚举不会被混淆。

我特别怀疑枚举的 values() 方法可能已被混淆。 valueOf 有时会使用 getMethod("values") 查找此方法。

关于java - 枚举抛出 "Is Not An Enum Type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26107707/

相关文章:

javascript - Typescript 中的 const 枚举

java - 使用 EnumSet 检查 either/or

java - 两个不同的 AsyncTasks 无法从 foregroundService 启动

Java 8 流 API,如何使用多个列表字段将列表收集到对象

java - 在Java中,枚举可以共享一个公共(public)构造函数吗

c++ - 如何通过 C++ 中的开关运行类枚举

enums - 比较 Rust 中的嵌套枚举变体

java - Hadoop 路径添加 %2F

java - 程序没有完全完成

java - JPA:在保存时忽略字段,但在选择时获取