在我的生产代码中,我在枚举的构造函数中构造一个EnumSet,但它无法检测到我的类是一个实际的枚举。这个错误打破了我的实际生产代码
为了测试目的,我编写了下面的类,但是即使使用这个小例子,它仍然无法识别枚举。如何将我的类标记为枚举,EnumSet知道它是枚举?
简单的源代码:
package test;
import java.util.*; // Set, EnumSet, Arrays
public enum Alphabet {
A,
B(A),
C(A, B),
D(A, B, C),
// You get the point
;
Set<Alphabet> prevLetters;
Alphabet() {
prevLetters = EnumSet.noneOf(Alphabet.class); // <- EnumSet here
}
Alphabet(Alphabet... prev) {
this();
prevLetters.addAll(Arrays.asList(prev));
}
public static void main(String[] args) {
System.out.println(Arrays.toString(Alphabet.values()));
}
}
例外:
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.ClassCastException: class test.Alphabet not an enum
at java.util.EnumSet.noneOf(EnumSet.java:112)
at test.Alphabet.<init>(Test.java:13)
at test.Alphabet.<clinit>(Test.java:4)