我见过两种处理具有属性的枚举的方法。一个比另一个更好吗?
作为财产:
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();
}
第一个对我来说显然看起来更干净 - 它利用了枚举的每个元素都有一个在初始化时已知的固定字符串 URL 的共性。您在第二个版本的每个实现中有效地重复了该“逻辑”。您将重写一个方法,以在每种情况下提供相同的logic(“仅返回编译时已知的字符串”)。我更喜欢保留对行为变化的覆盖。
我建议首先将
url
字段设为私有。
我会选择第一个,因为如果您忘记添加网址,编译器会抱怨。第二个会让你在这里犯错误。
查看 Josh Bloch 的有效 Java 本章中的第 21 项。它讨论了类型安全枚举模式。