Pregunta

Me gustaría cargar una serie de acciones de movimiento en un contenedor en tiempo de ejecución y acceder a ellos por un nombre de constante como es posible con una enumeración. El propósito de esto sería a la vez restringe las acciones posibles y también mejorar la legibilidad.

Al principio, yo estaba considerando una especie de enumeración dinámica (ver http://blog.xebia.com/2009/04/02/dynamic-enums-in-java/ ), pero como señala Java Bebedor por debajo de este es innecesaria, ya que las acciones se mantienen sin cambios.

Lo ideal es que lo que me gustaría hacer es una especie de envoltorio que contiene instancias AbstractAction que podría ser activado / desactivado y ser capaz de referirse a cada acción a través de un nombre simbólico.

Editar:. Cuestión se ha reformulado

¿Fue útil?

Solución

Puede hacer algo como esto:

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...;

Y a continuación, como han dicho otros, utilice la enumeración en conjunción con un EnumSet o EnumMap. Personalmente, no veo un valor enorme en ella más de sólo tener unos campos denominados sin una enumeración.

Creo que lo que realmente quiere es algún tipo de registro de acción como esta:

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);
}

La aplicación deja como ejercicio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top