我想定义一个枚举类型,其中包含两个“值”相同的常量。我称这两个常量为重复项。考虑以下示例:我想定义一个浏览器类型列表,并且我想同时拥有一个字面上为“IE”和“InternetExplorer”的常量,如下所示:
enum Browser {
CHROME("chrome"),
FIREFOX("firefox"),
IE("ie"),
INTERNETEXPLORER("ie");
String type;
Browser(String type) {
this.type = type;
}
}
然而,使用这种方法,以下代码将会失败:
Browser a = Browser.IE;
Browser b = Browser.INTERNETEXPLORER;
Assert.assertTrue(a==b);
我能想到的唯一解决方法是添加一个value()
方法,它属于Browser
类型,并返回浏览器实例的内部值。而等式测试代码将会是:
Assert.assertTrue(a.value()==b.value())
这不太好。那么有没有更好的想法呢?
为什么Java不允许覆盖Enum<T>
类的equals()
等方法?
编辑:
好的,感谢答案和评论。我同意我的原始想法与枚举的目的相违背。我认为以下更改可以满足我的需求。
public enum Browser {
CHROME,
FIREFOX,
IE;
public static Browser valueOfType(String type) {
if (b == null) {
throw new IllegalArgumentException("No browser of type " + type);
switch (type.toLowerCase()) {
case "chrome":
return Browser.CHROME;
case "firefox":
return Browser.FIREFOX;
case "ie":
case "internetexplorer":
case "msie":
return Browser.IE;
default:
throw new IllegalArgumentException("No browser of type " + type);
}
}
}
IE
和INTERNET_EXPLORER
,如果它们是相同的。您能解释一下为什么需要这样吗? - assyliasenum
,然后定义例如public static final Browser INTERNET_EXPLORER = Browser.IE
? - Louis Wasserman