我认为你是对的,它只能返回null或在其他地方声明的枚举.但是你不一定要在编译时指定“别的东西”.
class EnumEnumerator> implements Iterable {
private final Class enumClass;
public EnumEnumerator(Class enumClass) {
this.enumClass = enumClass;
}
public Iterator iterator() {
T[] values = enumClass.getEnumConstants();
return Arrays.asList(values).iterator();
}
}
稍后,您通过专门化泛型构造函数并传入您感兴趣的枚举类来调用它:
class EnumEnumeratorDemo {
enum Foo {
BAR, BAZ, QUX;
@Override public String toString() {
return name().toLowerCase();
}
}
public static void main(String[] args) {
for (Foo f : new EnumEnumerator(Foo.class)) {
System.out.println(f);
}
}
}
(显然这是一个人为的例子,在现实生活中你应该只调用Foo.values(),但你明白了.)