سؤال

أرغب في تحميل سلسلة من الإجراءات المتأرجحة في حاوية في وقت التشغيل والوصول إليها باسم ثابت قدر الإمكان مع التعداد. والغرض من ذلك هو تقييد الإجراءات الممكنة وكذلك تحسين قابلية القراءة.

في البداية ، كنت أفكر في نوع من التعداد الديناميكي (انظر 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...;

ثم كما قال آخرون ، استخدم التعداد بالتزامن مع التعداد أو enummap. أنا شخصياً لا أرى قيمة كبيرة فيه أكثر من مجرد وجود عدد قليل من الحقول المسمى دون التعداد.

أعتقد أن ما تريده حقًا هو نوع من سجل العمل مثل هذا:

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

ترك التنفيذ كتمرين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top