Типы перечислений Java - самопечатные перечисления - PullRequest
3 голосов
/ 27 апреля 2011

Я пытаюсь написать Java-функцию, которая принимает в качестве параметра тип enum (часть консольной системы меню). Эта функция затем напечатает все строковые представления в перечислении.

Перечисление выглядит так:

protected enum main{
    Option1,
    Option2,
    Option3,
    ...
    OptionN,
}

Моя функция отображения выглядит следующим образом

public void displayMenu(Enum menu) {
     // Get values from enum type
     Enum menuOps = menu.values();

     // Iterate over values and print
     for(int i =0 ; i < menuOps.length; i++)
            System.out.println( i + menuOps[i].toString() );
}

Моя проблема: очевидно, я не должен делать это правильно. В этом сценарии у объекта параметра «menu» нет метода values ​​().

Желаемым результатом будет функция displayMenu (), имеющая вывод:

Option1
Option2
Option3
...
OptionN

Есть какие-нибудь указатели на то, где я ошибаюсь? Любые советы о том, как реализовать эту функцию?

Обязан,

Noob

Ответы [ 3 ]

4 голосов
/ 27 апреля 2011

Поскольку ваш метод печати не зависит от конкретного экземпляра перечисления, он должен основываться на конкретном классе перечисления, а не на экземпляре этого класса

public static <T extends Enum<T>> void printEnum(Class<T> enumClass) {
    for (Enum<T> item : enumClass.getEnumConstants()) {
        System.out.println(item.toString());
    }
}
...
printEnum(MainEnum.class);
3 голосов
/ 27 апреля 2011

Это не совсем так, запись Enum не знает о других записях.Вы должны обратиться к содержащему классу:

for (Enum current : menu.getClass().getEnumConstants()) {
    System.out.println(current);
}

Вот общая версия метода:

public static <K extends Enum<K>> void displayEnumValues(final K enumItem) {
    for (final Enum<K> current : enumItem.getClass().getEnumConstants()) {
        System.out.println(current);
    }
}
1 голос
/ 27 апреля 2011

Миграция

public void displayMenu(Enum menu) {
     // Get values from enum type
     Enum menuOps = menu.values();

до

 public void displayMenu(main menu) {
     // Get values from enum type
     main[] menuOps = menu.values();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...