作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在运行时将一系列 Swing 操作加载到容器中,并通过常量名称访问它们,就像使用枚举一样。这样做的目的是限制可能的操作并提高可读性。
最初,我正在考虑一种动态枚举(请参阅 http://blog.xebia.com/2009/04/02/dynamic-enums-in-java/ ),但正如 Java Drinker 下面指出的那样,这是不必要的,因为操作保持不变。
理想情况下,我想做的是一种包含 AbstractAction
实例的包装器,可以启用/禁用这些实例,并能够通过符号名称引用每个操作。
编辑:问题已重新表述。
最佳答案
你可以这样做:
public enum Actions {
COPY( new AbstractAction() {
public void actionPerformed(ActionEvent e) {
//do something
}
}),
PASTE( new PasteAction() );
public final AbstractAction action;
private Actions(AbstractAction action) {
this.action = action;
}
}
//...
Actions.COPY.action...;
然后正如其他人所说,将枚举与 EnumSet 或 EnumMap 结合使用。就我个人而言,我认为它并没有比仅仅拥有一些没有枚举的命名字段有更大的值(value)。
我认为您真正想要的是像这样的某种操作注册表:
public class ActionsManager {
private final Map<String, Action> actions;
private final Map<User, Set<String>> enabledActions;
public Action get(String id);
public void register(String id, Action action);
public void deregister(String id);
public boolean isEnabled(User user, Action action);
}
实现留作练习。
关于java - AbstractActions 的枚举集包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3506501/
我是一名优秀的程序员,十分优秀!