EnumSet 方法不会将任何枚举类型识别为枚举

EnumSet methods won't recognize any enum types as enums

有许多关于类似错误的类似问题,但它们都是关于在尝试创建该类型的 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 的一部分,所以我假设不是,但我不知道。

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

我建议你使用另一个IDE,比如Eclipse, IntelliJ IDEA, or if you like the Interactive REPL that DrJava has, you can use JShell,它是JDK 9.