Acabo de notar que los estados Enum#toString
javadoc (el énfasis es mío):Reemplazar Enum # toString no es deseable?
devuelve el nombre de esta constante de enumeración, tal como figura en la declaración. Este método puede ser anulado, aunque normalmente no es necesario o como deseable. Un tipo de enumeración debe anular este método cuando existe una cadena de caracteres más "amigable con el programador".
Por defecto, toString()
y name()
devolver la misma cosa, por lo que incluso una vez toString
ha sido anulado, todavía se puede acceder al nombre de la enumeración a través del método name()
.
¿Alguien sabe por qué anular Enum#toString
no sería deseable?
EDIT: Como referencia, javadoc name()
's (énfasis como en el original):
devuelve el nombre de esta constante de enumeración, tal y como declaró en su declaración de enumeración. La mayoría de los programadores deben usar el método toString() con preferencia a este, ya que el método toString puede devolver un nombre más fácil de usar. Este método está diseñado principalmente para su uso en situaciones especializadas donde la corrección depende de obtener el nombre exacto, que no variará de un lanzamiento a otro.
Un ejemplo de cuándo podría ser deseable podría ser cuando existe una convención de codificación existente de que los valores enum deben nombrarse en mayúsculas (por ejemplo, 'VALOR '), pero eso parecería torpe a un usuario, por lo que' toString' podría implementarse para devolver 'name.toLowerCase()' o alguna otra manipulación de caso. – jpm
Mi caso de uso es que la enumeración representa un conjunto de opciones que se muestran al usuario (por ejemplo, en un 'JComboBox'). Mi primera inclinación fue anular 'toString' para proporcionar un nombre de visualización localizado para el usuario, pero el javadoc sugirió que solo se reemplazara para obtener un mejor formato de cadena" apto para programadores "que me hiciera creer que no era apropiado para usarlo como forma "fácil de usar". Sin embargo, el comentario en el javadoc para 'name()' sugiere que 'toString()' está diseñado para devolver un nombre * user * -friendly que me lleva a creer que el javadoc para 'toString' debería ser igual de fácil de usar en lugar. –