Los valores en my enum
son palabras que necesitan tener espacios en ellos, pero las enumeraciones no pueden tener espacios en sus valores, por lo que todo está agrupado. Quiero anular toString()
para agregar estos espacios donde se lo indique.
También quiero que la enumeración proporcione la enumeración correcta cuando la uso valueOf()
en la misma cadena a la que agregué los espacios.
Por ejemplo:
public enum RandomEnum
{
StartHere,
StopHere
}
La llamada toString()
en RandomEnum
cuyo valor es StartHere
devuelve cadena "Start Here"
. Llamada valueof()
en esa misma cadena ( "Start Here"
) devuelve valor de enumeración StartHere
.
¿Cómo puedo hacer esto?
Respuestas:
Puedes probar este código. Como no puede anular el
valueOf
método, debe definir un método personalizado (getEnum
en el código de muestra a continuación) que devuelve el valor que necesita y cambia su cliente para utilizar este método.fuente
Prueba esto, pero no estoy seguro de que funcione en todos lados :)
fuente
Puede usar un mapa estático en su enumeración que asigna cadenas a constantes de enumeración. Úselo en un método estático 'getEnum'. Esto evita la necesidad de recorrer las enumeraciones cada vez que desee obtener una de su valor de cadena.
Solo asegúrese de que la inicialización estática del mapa ocurra debajo de la declaración de las constantes enum.
Por cierto, ese tipo 'ImmutableMap' es de la API de guayaba de Google, y definitivamente lo recomiendo en casos como este.
EDITAR - Por los comentarios:
fuente
RestartHere("replay"), ReplayHere("replay")
o ningún 'valor' en absolutoPauseHere, WaitHere
(es decir, enum tiene un constructor predeterminado similar aprivate RandomEnum() { this.strVal = null; }
¿Qué tal una implementación de Java 8? (nulo puede ser reemplazado por su enumeración predeterminada)
O podrías usar:
fuente
No creo que vayas a obtener valueOf ("Comience aquí") para trabajar. Pero en cuanto a espacios ... intente lo siguiente ...
fuente
La siguiente es una buena alternativa genérica a valueOf ()
fuente
compareTo()
más elegante queequals()
para cadenas?.equals()
funcionaría bien. Podría usar==
si quieres. (Aunque una buena razón para no hacerlo es si alguna vez reemplaza la enumeración con una clase.)Todavía tiene una opción para implementar en su enumeración esto:
fuente