Можно ли реализовать форму пространства имен в перечислениях Java? - PullRequest
2 голосов
/ 22 августа 2011

В перечислении ниже я вижу три различных класса сообщений, которые существуют в перечислении Message: Form, Site и Admin.

Возможно ли реализовать механизм типа namespace в перечислении, чтобы вместо записи

Message.SITE_ERROR 
Message.ADMIN_ERROR

Вы пишете, это:

Message.Site.ERROR 
Message.Admin.ERROR

, чтобы Site и Admin представляли "пространство имен", под которым могут существовать дополнительные категории сообщений?

public enum Message {
    //FORM
    FORM_EMPTY("You've gotta put something in the form."),

    //SITE
    SITE_ERROR("Whoa. What happened?"),
    SITE_ALERT("Hey, it's that time again.");

    //ADMIN
    ADMIN_ERROR("Gotta look into this, dude."),
    ADMIN_ALERT("Time to get the lead out.");


    private String messageString;
    private Message(String messageString){
        this.messageString=messageString;
    }

    @Override
    public String toString() { 
        return messageString; 
    }   
}

Ответы [ 3 ]

0 голосов
/ 22 августа 2011

Вы можете сделать Message интерфейсом, который объявляет перечисления Site и Admin.Но тогда, конечно, вы не можете обойти объект Message и ожидать перечисления, просто объект Message.<something>.

Для чего вам это нужно?

0 голосов
/ 22 августа 2011

Конечно, просто используйте внутренние классы.

public interface State {
    String getMessageString();
}

public class Message {

    public static enum Form implements State {    
        EMPTY("You've gotta put something in the form."),

        private final String msg;
        public Form(String msg) { this.msg = msg; }
        public String getMessageString() { return msg; }
    }

    public static enum Site implements State {
        ERROR("Whoa. What happened?"),
        ALERT("Hey, it's that time again.");

        private final String msg;
        public Site(String msg) { this.msg = msg; }
        public String getMessageString() { return msg; }
    }

    public static enum Admin implements State {
        ADMIN_ERROR("Gotta look into this, dude."),
        ADMIN_ALERT("Time to get the lead out.");

        private final String msg;
        public Admin(String msg) { this.msg = msg; }
        public String getMessageString() { return msg; }
    }
}

Я думаю, что вы можете избавиться от повторяющегося кода с помощью общего базового класса, но моя память размыта при расширении перечислений, поэтому может не работать ...

0 голосов
/ 22 августа 2011

Вы могли бы использовать пакеты?

например:

com.foo.messages

- ваш базовый пакет.Тогда вы можете расширяться от этого

com.foo.messages.site
com.foo.messages.admin

и так далее ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...