是否可以在Java Enums中实现一种命名空间形式?

时间:2011-08-22 17:14:36

标签: java enums

在下面的枚举中,我看到Message枚举中存在三个不同类别的消息:FormSiteAdmin

是否可以在枚举中实现一种namespace机制,以便代替编写

Message.SITE_ERROR 
Message.ADMIN_ERROR

你写的,这个:

Message.Site.ERROR 
Message.Admin.ERROR

以便SiteAdmin代表“命名空间”,在其下面可以存在其他类别的消息?

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 :(得分:0)

您可以使用套餐吗?

例如:

com.foo.messages

是您的基础套餐。然后你可以从那里扩展

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

等等......

答案 1 :(得分:0)

您可以使Message界面声明枚举SiteAdmin。但是,当然,你不能传递一个Message对象并期望一个枚举,只是一个Message.<something>对象。

你想要什么?

答案 2 :(得分:0)

当然,只需使用内部类。

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

我认为你可以用一个共同的基类来摆脱重复的代码但是我的记忆在扩展枚举上是模糊的,所以这可能不起作用......