gpt4 book ai didi

java - AbstractActions 的枚举集包装器

转载 作者:行者123 更新时间:2023-12-02 08:30:33 24 4
gpt4 key购买 nike

我想在运行时将一系列 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com