Можно ли перебрать несколько классов enum? - PullRequest
2 голосов
/ 18 марта 2011

У меня есть три класса enum. Я хочу как-то поместить их в массив, перебрать массив и вызвать один и тот же метод в каждом классе enum. Это возможно в Java?

Мне кажется, что вы не можете помещать перечислимые типы в структуру массива (если я не пропустил как).

Спасибо.

Ответы [ 3 ]

4 голосов
/ 18 марта 2011

Пусть каждый тип перечисления реализует общий интерфейс , который имеет общий метод , который вы хотите вызвать. Теперь вы можете привести каждое перечисление во время итерации к этому общему интерфейсу и вызвать метод. Также посмотрите на EnumSet

2 голосов
/ 18 марта 2011

Вот пример с двумя перечислениями и использованием отражения:

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);
    }
}
1 голос
/ 18 марта 2011

Если под классами enum вы подразумеваете три различных перечисления, каждое со своими элементами, то вы можете использовать массив типа Enum[]. Если вы имеете в виду три элемента из одного перечисления, назовем его enum X, тогда вы поместите их в массив типа X[].

Если вы пытаетесь вызвать стандартную функцию Enum для каждой из них, то все должно быть в порядке. Если вам нужно вызвать свою собственную функцию для них, и вы собираетесь использовать массив Enum[], вам нужно будет использовать отражение или все они реализуют один и тот же интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...