Das kannst du nicht. Ich denke, Sie haben hier VIER Optionen. Alle vier bieten eine Lösung, aber mit einem etwas anderen Ansatz ...
Option Eins: Verwenden Sie die in name()
einer Aufzählung integrierte Funktion. Dies ist vollkommen in Ordnung, wenn Sie kein spezielles Namensformat benötigen.
String name = Modes.mode1.name(); // Returns the name of this enum constant, exactly as declared in its enum declaration.
Option 2: Fügen Sie Ihren Aufzählungen übergeordnete Eigenschaften hinzu, wenn Sie mehr Kontrolle wünschen
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;
}
}
Option 3: Verwenden Sie statische Finals anstelle von Aufzählungen:
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() { }
}
Option 4: Schnittstellen haben jedes Feld öffentlich, statisch und endgültig:
public interface Modes {
String MODE_1 = "Fancy Mode 1";
String MODE_2 = "Fancy Mode 2";
String MODE_3 = "Fancy Mode 3";
}
.name()
Siehe: stackoverflow.com/a/6667365/887836Jede Aufzählung hat sowohl eine name () - als auch eine valueOf (String) -Methode. Ersteres gibt den Zeichenfolgennamen der Aufzählung zurück, und letzteres gibt den Aufzählungswert an, dessen Name die Zeichenfolge ist. Ist das wie das, wonach Sie suchen?
Es gibt auch einen statischen valueOf (Class, String) in Enum selbst, den Sie auch verwenden können
quelle
some-really-long-string
.valueOf(String)
Methode in Kombination mit verwendettoUpperCase(Locale)
, um die String-Konvertierung sicherzustellen.Sie könnten das überschreiben
toString()
Methode für jeden Aufzählungswert .Beispiel:
Verwendungszweck:
quelle
Wie Benny Neugebauer erwähnt, könnten Sie den toString () überschreiben. Anstatt jedoch den toString für jedes Enum-Feld zu überschreiben, gefällt mir eher Folgendes:
Sie können auch eine statische Methode hinzufügen, um alle Felder abzurufen, alle zu drucken usw. Rufen Sie einfach getValue auf, um die Zeichenfolge zu erhalten, die jedem Enum-Element zugeordnet ist
quelle
mode1.name()
oderString.valueOf(mode1)
. Besser geht es leider nichtquelle
Sie können einen Aufruf wie unten ausführen, wo immer Sie den Wert als Zeichenfolge aus der Aufzählung erhalten möchten.
Dies gibt "Mode1" als String zurück.
quelle
Sie können verwenden
Mode.mode1.name()
, müssen dies jedoch häufig nicht tun.quelle
name()
undtoString()
kann überschrieben werden, aber hoffentlich wird dies durch das Lesen des Codes für das,enum
wenn dies geschieht , klar .name()
istfinal
. Danke, dass du mich korrigiert hast. :)Soweit ich weiß, wäre der einzige Weg, den Namen zu bekommen, der
Wenn Sie es jedoch wirklich so brauchen, können Sie Folgendes tun:
quelle
Mode.mode1
ist immer noch nicht vom TypString
.Für meine Enums denke ich nicht wirklich gerne daran, dass ihnen jeweils 1 String zugewiesen wird. So implementiere ich eine toString () -Methode für Enums.
quelle
return
ist redundant, da das Einschalten von Enums mit allen Enums beendet wird.Sie können einfach verwenden:
quelle
"" + Modes.mode1
. Ich habe die Antwort korrigiert''.join()
meine Lösung für Ihr Problem!
quelle
Enum ist nur eine kleine Sonderklasse. Aufzählungen können zusätzliche Felder speichern, Methoden implementieren usw. Zum Beispiel
Jetzt können Sie sagen:
System.out.println(Modes.mode1.character())
und siehe Ausgabe:
a
quelle
quelle
Diese Methode sollte mit folgenden Methoden funktionieren
enum
:quelle
Es wird gedruckt:
Dieses Design für Enum-String-Konstanten funktioniert in den meisten Fällen.
quelle
Nach vielen Versuchen bin ich mit dieser Lösung gekommen
quelle
Sie können dies versuchen:
}}
quelle
Ich fand, dass dies einfacher ist, um Typfehler zu verhindern:
Dies kann jedoch funktionieren, wenn Sie einen String für ein Protokoll / einen Druck verwenden müssen oder wenn Java die toString () -Methode automatisch kompiliert, jedoch für eine Codezeile wie diese ->
Stattdessen müssen Sie, wie oben erwähnt, die Aufzählung noch erweitern und
.name()
in folgenden Fällen verwenden:quelle