2011-08-22 23 views
2

在下面的枚举中,我看到存在于Message枚举中的三种不同类别的消息:Form,SiteAdmin是否可以在Java Enums中实现一种名称空间的形式?

是否有可能实现一个枚举类型的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; 
    } 
} 
+2

也许只是让三个独立的'enum'类型,但让他们实现一个通用的界面。 – MatrixFrog

回答

0

您可以使用包?

例如:

com.foo.messages 

是你的基本包。然后你可以从

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

等等......扩大

0

你可以做Message声明枚举SiteAdmin的接口。但是,当然,你不能传递一个Message对象,并期望一个枚举,只是一个Message.<something>对象。

你想要做什么?

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

我想你可以摆脱与公共基类的重复的代码,但我的记忆是在延长枚举,这样可不行模糊......

+0

这可以工作,但我不希望看到如果每个枚举有100多个条目,你将如何管理它=) – Dorpsidioot

相关问题