null
私はあなたが正しいと思います。それは、返すか、別の場所でEnum
宣言することしかできません。しかし、必ずしもコンパイル時に「何か他のもの」を指定する必要はありません。
class EnumEnumerator<T extends Enum<T>> implements Iterable<T> {
private final Class<T> enumClass;
public EnumEnumerator(Class<T> enumClass) {
this.enumClass = enumClass;
}
public Iterator<T> 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>(Foo.class)) {
System.out.println(f);
}
}
}
(明らかに、これは不自然な例であり、実際には単に Foo.values() を呼び出す必要がありますが、アイデアは理解できます。)