有没有办法编写通用循环来迭代任意枚举? 例如:
public static void putItemsInListBox(Enum enum, ListBox listbox){
for(Enum e : enum.values(){
listBox.addItem(e.toString(), String.valueOf(e.ordinal());
}
}
您无法执行上述操作,因为Enum类没有像实现的Enum类那样的名为values()的方法。上面的for循环适用于定义为枚举的类。
答案 0 :(得分:21)
它的工作方式与传递Class
的方式完全相同:
public static <E extends Enum<?>> void iterateOverEnumsByInstance(E e)
{
iterateOverEnumsByClass(e.getClass());
}
public static <E extends Enum<?>> void iterateOverEnumsByClass(Class<E> c)
{
for (E o: c.getEnumConstants()) {
System.out.println(o + " " + o.ordinal());
}
}
用法:
enum ABC { A, B, C }
...
iterateOverEnumsByClass(ABC.class);
iterateOverEnumsByInstance(ABC.A);
答案 1 :(得分:2)
这很便宜,但应该有用(至少根据我的测试):
public static <T extends Enum<T>> void putItemsInListBox(Class<T> cls, ListBox listbox) {
for (T item : EnumSet.allOf(cls))
listbox.addItem(item.toString(), String.valueOf(item.ordinal()));
}
这是有效的,因为EnumSet
对Enum
的非公开成员具有特殊的神奇访问权限,这使得它可以枚举枚举值,尽管缺少values
方法。