3

我非常喜欢 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具有三个常数DEVELOPMENT, PRODUCTION, SANDBOX。该类Web还具有要设置baseUrlEnvironment' baseUrl(不确定这是这样做的好习惯)。

为了设置baseUrl我目前正在这样做:

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

我不确定这是在类中使用枚举的正确方法。有没有办法直接设置Web baseUrl为 enums baseUrl

我在这里错过了什么吗。

提前致谢

4

5 回答 5

3

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

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

现在您只能将 Environments 传递给您的 Web 类,而不是任何 ol' 字符串。

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

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

这样一来,我就不能不new Web().setEnvironment("marvo")小心过来打电话了。它强制执行一定程度的正确性。

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

于 2012-12-13T07:24:56.597 回答
2

与其直接使用 Enum 的成员,不如将baseUrl其设为私有并在 enum 类中有一个 getter 方法。除此之外,我认为以这种方式使用枚举是可以的

于 2012-12-13T07:19:40.127 回答
1

使枚举成为顶级类/枚举。
为 baseUrl 字段添加一个 getter。

于 2012-12-13T07:21:01.893 回答
1

我认为您使用 Enum 的方式没有任何问题。但是代码看起来有点笨拙:

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

我会将 Enum 从Web类中取出并省略类中多余的“baseUrl”字段 -Web你不需要它,因为你的 Enum 中有值。而不是baseUrl我会有一个 urlType 类型的成员Environment。将访问器方法添加到枚举baseUrl内部也会很好Environment

于 2012-12-13T07:26:32.717 回答
0

除了 Bohemian 和 vishal_aim 所说的,您可能会不必要地公开 baseUrl 成员(或重构后的 getBaseUrl() 方法)。而是将枚举传递给 Web 类并让它从枚举中挖掘 URL。这样,如果您将枚举保留在 Web 类中,则可以将 baseUrl 保留为私有。

public void setEnvironment(Environment env) {
    baseUrl = env.getBaseUrl();
    ....
}
于 2012-12-13T07:27:02.943 回答