No puedes Creo que tienes CUATRO opciones aquí. Los cuatro ofrecen una solución pero con un enfoque ligeramente diferente ...
Opción uno: use el incorporado en name()
una enumeración. Esto está perfectamente bien si no necesita ningún formato de nombre especial.
String name = Modes.mode1.name(); // Returns the name of this enum constant, exactly as declared in its enum declaration.
Opción dos: agregue propiedades sobresalientes a sus enumeraciones si desea más control
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;
}
}
Opción tres: use finales estáticos en lugar de enumeraciones:
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() { }
}
Opción cuatro: las interfaces tienen cada campo público, estático y final:
public interface Modes {
String MODE_1 = "Fancy Mode 1";
String MODE_2 = "Fancy Mode 2";
String MODE_3 = "Fancy Mode 3";
}
.name()
Ver: stackoverflow.com/a/6667365/887836Cada enumeración tiene un método name () y valueOf (String). El primero devuelve el nombre de cadena de la enumeración, y el último da el valor de enumeración cuyo nombre es la cadena. ¿Es esto lo que estás buscando?
También hay un valor estático Of (Class, String) en Enum, por lo que también puede usar
fuente
some-really-long-string
.valueOf(String)
método en combinación contoUpperCase(Locale)
para garantizar la conversión de cadenas.Puede anular el
toString()
método para cada valor de enumeración.Ejemplo:
Uso:
fuente
Como menciona Benny Neugebauer, puede sobrescribir toString (). Sin embargo, en lugar de sobrescribir toString para cada campo de enumeración, me gusta más algo como esto:
También puede agregar un método estático para recuperar todos los campos, imprimirlos todos, etc. Simplemente llame a getValue para obtener la cadena asociada a cada elemento Enum
fuente
mode1.name()
oString.valueOf(mode1)
. No hay nada mejor que eso, me temofuente
puede hacer una llamada como a continuación donde quiera obtener el valor como una cadena de la enumeración.
Esto devolverá "Mode1" como una cadena.
fuente
Puede usar
Mode.mode1.name()
sin embargo, a menudo no necesita hacer esto.fuente
name()
ytoString()
puede ser anulado, pero espero que esto será evidente a partir de la lectura del código para elenum
caso de que esto está sucediendo.name()
esfinal
. Gracias por corregirme. :)Que yo sepa, la única forma de obtener el nombre sería
Sin embargo, si realmente lo necesita de esta manera, podría hacer:
fuente
Mode.mode1
todavía no es de tipoString
.Para mis enumeraciones, no me gusta pensar que se les asigne 1 Cadena cada una. Así es como implemento un método toString () en enumeraciones.
fuente
return
es redundante porque el encendido de las enumeraciones con todas las enumeraciones está terminando.Simplemente puede usar:
fuente
"" + Modes.mode1
. Arreglé la respuesta''.join()
¡mi solución para tu problema!
fuente
Enum es solo una clase un poco especial. Las enumeraciones pueden almacenar campos adicionales, implementar métodos, etc. Por ejemplo
Ahora puedes decir:
System.out.println(Modes.mode1.character())
y ver salida:
a
fuente
fuente
Este método debería funcionar con cualquier
enum
:fuente
Imprimirá:
Este diseño para constantes de cadena enum funciona en la mayoría de los casos.
fuente
después de muchos intentos, he venido con esta solución
fuente
Puedes probar esto:
}
fuente
Encontré que este es más fácil para evitar errores de tipo:
sin embargo, esto puede funcionar cuando necesita usar una cadena en un log / println o cuando java compila el método toString () automáticamente, pero en una línea de código como esta ->
en cambio, como se mencionó anteriormente, aún tendrá que extender la enumeración y usarla
.name()
en casos como este:fuente