Os valores em meu enum
são palavras que precisam ter espaços neles, mas enumerações não podem ter espaços em seus valores; portanto, tudo está agrupado. Eu quero substituir toString()
para adicionar esses espaços onde eu digo.
Também quero que a enumeração forneça a enumeração correta quando uso valueOf()
a mesma sequência em que adicionei os espaços.
Por exemplo:
public enum RandomEnum
{
StartHere,
StopHere
}
Chamada toString()
em RandomEnum
cujo valor é StartHere
seqüência de retornos "Start Here"
. A chamada valueof()
nessa mesma string ( "Start Here"
) retorna um valor de enumeração StartHere
.
Como posso fazer isso?
Respostas:
Você pode experimentar este código. Como você não pode substituir o
valueOf
método, é necessário definir um método personalizado (getEnum
no código de exemplo abaixo) que retorne o valor necessário e altere seu cliente para usar esse método.fonte
Tente isso, mas não sei se isso funcionará em todos os lugares :)
fonte
Você pode usar um mapa estático em sua enumeração que mapeia Strings para constantes de enumeração. Use-o em um método estático 'getEnum'. Isso ignora a necessidade de iterar pelas enumerações sempre que você deseja obter uma do valor String.
Apenas verifique se a inicialização estática do mapa ocorre abaixo da declaração das constantes enum.
BTW - esse tipo 'ImmutableMap' é da API do Google goiaba, e eu definitivamente recomendo em casos como este.
EDIT - Pelos comentários:
fonte
RestartHere("replay"), ReplayHere("replay")
ou nenhum 'valor' igualPauseHere, WaitHere
(ou seja, o enum tem um construtor padrão semelhante aprivate RandomEnum() { this.strVal = null; }
Que tal uma implementação do Java 8? (null pode ser substituído pelo seu Enum padrão)
Ou você pode usar:
fonte
Eu não acho que você vai obter valor de ("Start Here") para funcionar. Mas quanto aos espaços ... tente o seguinte ...
fonte
A seguir, é uma boa alternativa genérica para valueOf ()
fonte
compareTo()
mais elegante do queequals()
para Strings?.equals()
funcionaria bem. Poderia usar==
se você gosta. (Embora uma boa razão para não fazer isso seja, você deve substituir o enum por uma classe.)Você ainda tem uma opção para implementar em sua enumeração isso:
fonte