Java Enum 属性最佳实践

问题描述 投票:0回答:3

我见过两种处理具有属性的枚举的方法。一个比另一个更好吗?

作为财产:

public enum SEARCH_ENGINE {
    GOOGLE("http://www.google.com"),
    BING("http://www.bing.com");

    private final String url;

    private SEARCH_ENGINE(String url) {
        this.url = url;
    }

    public String getURL() {
        return url;
    }
}

作为一种方法:

public enum SEARCH_ENGINE {
    GOOGLE {
        public String getURL() {return "http://www.google.com";}
    },
    BING {
        public String getURL() {return "http://www.bing.com";}
    };

    public abstract String getURL();
}
java enums enumeration
3个回答
20
投票

第一个对我来说显然看起来更干净 - 它利用了枚举的每个元素都有一个在初始化时已知的固定字符串 URL 的共性。您在第二个版本的每个实现中有效地重复了该“逻辑”。您将重写一个方法,以在每种情况下提供相同的logic(“仅返回编译时已知的字符串”)。我更喜欢保留对行为变化的覆盖。

我建议首先将

url
字段设为私有。


0
投票

我会选择第一个,因为如果您忘记添加网址,编译器会抱怨。第二个会让你在这里犯错误。


0
投票

查看 Josh Bloch 的有效 Java 本章中的第 21 项。它讨论了类型安全枚举模式。

© www.soinside.com 2019 - 2024. All rights reserved.