簡體   English   中英

是否可以在Java枚舉中實現某種形式的命名空間?

[英]Is it possible to implement a form of namespacing in 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; 
    }   
}

您可以使用包裹嗎?

例如:

com.foo.messages

是您的基本包裝。 然后,您可以從中擴展

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

等等...

您可以將Message聲明為枚舉SiteAdmin的接口。 但是,當然,您不能傳遞Message對象並期望枚舉,而只能是Message.<something>對象。

你要干嘛

當然,只使用內部類。

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

我認為您可能會擺脫帶有通用基類的重復代碼,但是我對擴展枚舉的記憶模糊,因此可能無法正常工作...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM