java - 如何以正确的方式使用 Enum?

标签 java enums

我非常喜欢 Java,我第一次像这样使用枚举:

    public class Web {
        public String baseUrl;
        public static enum Environment {

            DEVELOPMENT("http://development") ,
            PRODUCTION("http://production"),
            SANDBOX("http://sandbox");

            public final String baseUrl;

            private Environment(String baseUrl)
            {
                this.baseUrl = baseUrl;
            }
        }
    }

枚举 Environment 具有三个常量 DEVELOPMENTPRODUCTIONSANDBOXWeb 类也有 baseUrlEnvironmentbaseUrl 将被设置(不确定这是这样做的好习惯)。

为了设置 baseUrl 我目前是这样做的:

new Web().setBaseUrl(Web.Environment.PRODUCTION.baseUrl)

我不确定这是在类中使用枚举的正确方法。有什么方法可以直接将 Web baseUrl 设置为枚举 baseUrl

我是不是漏掉了什么。

提前致谢

最佳答案

我认为您走在正确的轨道上,但是通过以这种方式访问​​ URL,您正在失去 Java 枚举的一些优势。相反,使用枚举的类型来帮助确保您将正确的值传递给您的方法。也就是说,单独传递枚举,让方法从中提取任何值。例如:

new Web().setEnvironment(Web.Environment.PRODUCTION);

现在您只能将环境传递给您的 Web 类,而不是任何其他字符串。

[编辑] 那么您的 Web.setEnvironment 方法如下所示:

public void setEnvironment(Environment environment) {
    this.baseUrl = environment.getBaseUrl();
}

这样,我就不会无意中调用 new Web().setEnvironment("marvo")。它强制执行一定程度的正确性。

而 vishal_aim 是对的。即使使用枚举,您也应该练习数据隐藏和封装,因此将实例变量设为私有(private),并提供像 getBaseUrl() 这样的访问器来检索值。

关于java - 如何以正确的方式使用 Enum?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13854856/

相关文章:

java - 如何导入jms

java - 哪些语言可以很好地替代 Java?

java - 在 Spring ApplicationContext.xml 中推送 Maven 属性

对使用不使用接口(interface)的第三方库的方法进行 Java 单元测试

java - Servlet/JSP 流程控制 : Enums, 异常,还是其他原因?

c++ - 是否可以手动定义枚举类的转换?

java - 在 ListView 中滚动会丢失文本颜色和字体

c++ - 是否可以嵌套现有枚举类

java - 什么时候使用不可实例化的类而不是枚举?

vba 枚举错误 : "Invalid inside procedure."