Получение значений () перечисления, когда перечисление объявлено как универсальный параметр - PullRequest
3 голосов
/ 09 января 2012

Код, показанный ниже, работает, потому что метод values() является статическим.Мой вопрос заключается в том, как я могу добиться того, что будет делать код, приведенный ниже, если бы B не был универсальным.

class A<B extends Enum<B>> {
    public A() {
        for (B b : b.values()) {

        }
    }
}

Я могу придумать два решения:

  1. передать значения перечисления в AКонструктор
  2. заставляет B реализовывать интерфейс, который определяет метод для получения значений перечисления.

Оба мне кажутся грязными.У кого-нибудь есть лучшие решения?

Ответы [ 2 ]

7 голосов
/ 09 января 2012

Попробуйте использовать getEnumConstants ()

1 голос
/ 01 ноября 2012

Вот урезанный пример, включающий подкласс JPanel, который позволяет вам выбирать значение из Enum с помощью переключателей.Чтобы использовать его, вы должны сделать что-то вроде:

enum Animal { DOG, CAT, FISH };
RadioPanel<Animal> animal_panel = new RadioPanel<Animal>(Animal.class);
dialog.add(animal_panel);
...
Animal favorite_animal = animal_panel.getSelectedOption();

Сам класс:

public class RadioPanel<T extends Enum<T>> extends JPanel {
    private Map<T,JRadioButton> buttons;
    private ButtonGroup button_group;
    private Class<T> clazz;

    public RadioPanel(Class<T> clazz) {
        this.clazz = clazz;
        buttons = new EnumMap<T, JRadioButton>(clazz);
        button_group = new ButtonGroup();       

        for (T value : clazz.getEnumConstants()) {
            JRadioButton button = new JRadioButton(value.toString());
            buttons.put(value, button);
            button_group.add(button);
            add(button);
        }
    }

    public void setSelectedOption(T value) {
        buttons.get(value).setSelected(true);
    }

    public T getSelectedOption() {
        for (T value : clazz.getEnumConstants()) {
            if (buttons.get(value).isSelected())
                return value;
        }

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