Quiero definir un tipo de enumeración con dos constantes cuyo "valor" sea el mismo. Llamo a estas dos constantes como duplicadas. Consideremos el siguiente ejemplo: quiero definir una lista de los tipos de navegador, y quiero tener tanto un literal "IE" y "InternetExplorer", de la siguiente manera:¿Cómo puedo definir constantes de enumeración duplicadas en Java?
enum Browser {
CHROME("chrome"),
FIREFOX("firefox"),
IE("ie"),
INTERNETEXPLORER("ie");
String type;
Browser(String type) {
this.type = type;
}
}
Sin embargo, con esto, el siguiente código fallan,
Browser a = Browser.IE;
Browser b = Browser.INTERNETEXPLORER;
Assert.assertTrue(a==b);
la única solución que se me ocurre es que para añadir un método del tipo Browser
que devuelve el valor interno de la instancia del navegador value()
. Y el código de prueba de igualdad sería
Assert.assertTrue(a.value()==b.value())
Esto no es bueno. Entonces, ¿alguien tiene una mejor idea?
¿Por qué Java no permite sobrescribir los métodos como equals()
de la clase Enum<T>
?
EDITAR:
OK, gracias por las respuestas y comentarios. Estoy de acuerdo en que mi pensamiento original era contrario al propósito de enum. Creo que los siguientes cambios pueden satisfacer mi necesidad.
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);
}
}
}
No estoy seguro, entiendo por qué quiere 2 constantes enum 'IE' y' INTERNET_EXPLORER' si son iguales. ¿Puedes explicar por qué lo necesitas? – assylias
el propósito de la enumeración es crear un conjunto de vocabularios controlados que se utiliza para catagorizar o agrupar el mismo concepto. lo que estás haciendo solo rompe su propósito. – gigadot
@assylias, lo necesito porque, en algún lugar diferente, es posible que desee utilizar identificadores diferentes que apunten a lo mismo. Tal vez otro ejemplo tenga más sentido cuando a veces quiero usar ZERO y, a veces, quiero usar NULL, pero quiero que tengan el mismo significado. –