Você não pode. Eu acho que você tem quatro opções aqui. Todos os quatro oferecem uma solução, mas com uma abordagem ligeiramente diferente ...
Opção um: use o built-in name()
em uma enumeração. Isso é perfeitamente bom se você não precisar de nenhum formato de nomeação especial.
String name = Modes.mode1.name(); // Returns the name of this enum constant, exactly as declared in its enum declaration.
Opção 2: adicione propriedades de substituição às suas enumerações, se quiser mais controle
public enum Modes {
mode1 ("Fancy Mode 1"),
mode2 ("Fancy Mode 2"),
mode3 ("Fancy Mode 3");
private final String name;
private Modes(String s) {
name = s;
}
public boolean equalsName(String otherName) {
// (otherName == null) check is not needed because name.equals(null) returns false
return name.equals(otherName);
}
public String toString() {
return this.name;
}
}
Opção três: use finais estáticos em vez de enumerações:
public final class Modes {
public static final String MODE_1 = "Fancy Mode 1";
public static final String MODE_2 = "Fancy Mode 2";
public static final String MODE_3 = "Fancy Mode 3";
private Modes() { }
}
Opção quatro: as interfaces têm todos os campos públicos, estáticos e finais:
public interface Modes {
String MODE_1 = "Fancy Mode 1";
String MODE_2 = "Fancy Mode 2";
String MODE_3 = "Fancy Mode 3";
}
.name()
See: stackoverflow.com/a/6667365/887836Cada enumeração possui um método name () e um método valueOf (String). O primeiro retorna o nome da seqüência de caracteres da enumeração e o último fornece o valor da enumeração cujo nome é a sequência. É assim que você está procurando?
Há também um valor estáticoOf (Class, String) no próprio Enum, para que você também possa usar
fonte
some-really-long-string
.valueOf(String)
método em combinação comtoUpperCase(Locale)
para garantir a conversão de String.Você pode substituir o
toString()
método para cada valor de enumeração.Exemplo:
Uso:
fonte
Como Benny Neugebauer menciona, você pode sobrescrever o toString (). No entanto, em vez de sobrescrever o toString para cada campo de enum, eu gosto mais de algo assim:
Você também pode adicionar um método estático para recuperar todos os campos, imprimi-los, etc. Simplesmente chame getValue para obter a sequência associada a cada item do Enum
fonte
mode1.name()
ouString.valueOf(mode1)
. Não fica melhor que isso, receiofonte
você pode fazer uma ligação como abaixo, sempre que quiser obter o valor como uma sequência da enumeração.
Isso retornará "Mode1" como uma String.
fonte
Você pode usar
Mode.mode1.name()
no entanto, muitas vezes não precisa fazer isso.fonte
name()
etoString()
podem ser substituídos, mas espero que isso fique claro ao ler o código para oenum
se isso estiver acontecendo.name()
éfinal
. Obrigado por me corrigir. :)Até onde eu sei, a única maneira de obter o nome seria
Se você realmente precisar dessa maneira, no entanto, poderá fazer:
fonte
Mode.mode1
ainda não é do tipoString
.Para meus enums, não gosto de pensar neles sendo alocados com 1 String cada. É assim que eu implemento um método toString () em enumerações.
fonte
return
é redundante, porque a ativação de enumerações com todas as enumerações está terminando.Você pode simplesmente usar:
fonte
"" + Modes.mode1
. Eu corrigi a resposta''.join()
minha solução para o seu problema!
fonte
Enum é apenas uma classe especial. Enums podem armazenar campos adicionais, implementar métodos etc. Por exemplo
Agora você pode dizer:
System.out.println(Modes.mode1.character())
e veja a saída:
a
fonte
fonte
Este método deve funcionar com qualquer
enum
:fonte
Irá imprimir:
Esse design para constantes de seqüência de caracteres enum funciona na maioria dos casos.
fonte
depois de muitas tentativas eu vim com esta solução
fonte
Você pode tentar isso:
}
fonte
Eu encontrei este é mais fácil para evitar erro de tipo:
no entanto - isso pode funcionar quando você precisar usar uma String em um log / println ou sempre que o Java compilar o método toString () automaticamente, mas em uma linha de código como esta ->
em vez disso, como mencionado acima, você ainda precisará estender a enumeração e usá-la
.name()
em casos como este:fonte