是否可以迭代几个枚举类?

时间:2011-03-18 16:24:31

标签: java enums

我有三个枚举类。我想以某种方式将它们放在一个数组中,循环遍历数组并在每个枚举类中调用相同的方法。这在Java中可行吗?

在我看来,你不能在数组结构中放置枚举类型(除非我错过了)。

谢谢。

3 个答案:

答案 0 :(得分:4)

让每个枚举类型实现一个公共接口,它具有您想要调用的公共方法。现在,您可以在迭代时将每个枚举转换为此公共接口并调用该方法。另请查看EnumSet

答案 1 :(得分:2)

这是一个包含2个枚举并使用反射的示例:

enum Colour{
    RED,
    BLUE,
    GREEN;

    public void foo(){
        System.out.println("COLOUR");
    }
}

enum Fruit {
    APPLE,
    BANANA,
    PEAR;

    public void foo(){
        System.out.println("FRUIT");
    }
}

您可以将类放入数组中并使用反射为每个枚举常量调用方法:

//create an array
Class[] arr = new Class[2];
arr[0] = Colour.class;
arr[1] = Fruit.class;

//call the foo method
for(Class c : arr){
    Method m = c.getMethod("foo", null);
    for(Object o : c.getEnumConstants()){
        System.out.println("Invoking foo on:" + o);
        m.invoke(o, null);
    }
}

答案 2 :(得分:1)

如果,通过枚举类,您指的是三个不同的枚举,每个枚举都有自己的元素,那么您可以使用类型为Enum[]的数组。如果你的意思是单个枚举中的三个项目,我们称之为enum X,然后你将它们放在X[]类型的数组中。

如果您尝试在每个上调用标准枚举功能,那么您应该全部设置。如果你需要在它们上面调用自己的函数,并使用Enum[]数组,你需要使用反射或让它们都实现相同的接口。