下面显示的代码确实有效,因为方法values()
是静态的。我的问题是如果B不是通用的,我怎样才能实现下面的代码呢。
class A<B extends Enum<B>> {
public A() {
for (B b : b.values()) {
}
}
}
我可以想到两个解决方案:
对我来说,这两件事看起来都很混乱。有人有更好的解决方案吗?
答案 0 :(得分:7)
答案 1 :(得分:1)
这是一个涉及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;
}
}