【问题标题】:EnumSet methods won't recognize any enum types as enumsEnumSet 方法不会将任何枚举类型识别为枚举
【发布时间】:2021-08-28 21:26:34
【问题描述】:

有许多关于类似错误的类似问题,但它们都是关于在尝试创建该类型的 EnumSet 之前未初始化枚举类型的特定情况。我的问题要基本得多。无论我尝试做的事情多么简单,我都无法获得任何 EnumSet 方法来将任何枚举识别为枚举。例如:

> enum X{GREEN,RED,YELLOW}
> X.values()
{ GREEN, RED, YELLOW }
> EnumSet.allOf(X.class);
java.lang.ClassCastException: class X not an enum
   at java.base/java.util.EnumSet.noneOf(EnumSet.java:113)
   at java.base/java.util.EnumSet.allOf(EnumSet.java:132)
   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
   at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 

无论我尝试使用哪种 EnumSet 方法,我都会得到完全相同的错误。有谁知道我可能做错了什么?我将 DrJava 与 JDK 8 一起使用,因为这是我学到的,我只是为了好玩而这样做,所以我不需要使用最新的开发工具包,这可能是问题吗?文档说 EnumSet 是 Java 8 的一部分,所以我假设不是,但我不知道。

【问题讨论】:

  • 我无法重现这种情况,上面是在 java 8 和 11 中工作
  • 虽然与您的问题没有太大关系,但您的堆栈跟踪包含模块名称 (java.base),这似乎表明您使用的是 JDK 9...
  • 您的代码runs just fine on Java 12 at IdeOne.com。这证实了Answer by Sweeper,问题可能出在 DrJava 而不是 Java 上。

标签: java enums enumset


【解决方案1】:

这似乎是 DrJava 中一个非常古老的错误:#744 enums can't appear in EnumSet。自 2009 年以来已报告,但仍未修复。根据讨论,显然X.class.isEnum()返回false,这似乎暗示在编译枚举声明时,DrJava没有正确加载与声明对应的类。

我建议您使用其他 IDE,例如 Eclipse、IntelliJ IDEA,或者如果您喜欢 DrJava 的交互式 REPL,您可以使用 JDK 9 附带的 JShell。

【讨论】:

    猜你喜欢
    • 2013-09-19
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多