Java Enum属性最佳实践

时间:2011-05-12 20:03:26

标签: java enums enumeration

我已经看到两种处理枚举属性的方法。一个比另一个好吗?

作为财产:

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

3 个答案:

答案 0 :(得分:19)

第一个对我来说显然更清晰 - 它利用了枚举的每个元素都具有固定字符串URL的通用性,这在初始化时是已知的。您在第二个版本中的每个实现中都有效地重复了“逻辑”。在每种情况下,您都要重写一个方法来提供相同的逻辑(“只返回编译时已知的字符串”)。我更愿意保留覆盖行为的更改。

我建议将url字段设为私有,但在第一个字段中。

答案 1 :(得分:0)

看一下Josh Bloch's Effective Java这一章的第21项。它讨论了类型安全的枚举模式。

答案 2 :(得分:0)

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