Die Werte in my enum
sind Wörter, die Leerzeichen enthalten müssen, aber Enums können keine Leerzeichen in ihren Werten enthalten, sodass alles zusammengefasst ist. Ich möchte überschreiben toString()
, um diese Leerzeichen dort hinzuzufügen, wo ich es sage.
Ich möchte auch, dass die Aufzählung die richtige Aufzählung liefert, wenn ich valueOf()
dieselbe Zeichenfolge verwende, zu der ich die Leerzeichen hinzugefügt habe.
Beispielsweise:
public enum RandomEnum
{
StartHere,
StopHere
}
Rufen Sie toString()
an , RandomEnum
dessen Wert StartHere
zurückkehrt Zeichenfolge "Start Here"
. Der Aufruf valueof()
derselben Zeichenfolge ( "Start Here"
) gibt den Aufzählungswert zurück StartHere
.
Wie kann ich das machen?
Antworten:
Sie können diesen Code ausprobieren. Da Sie die
valueOf
Methode nicht überschreiben können , müssen Sie eine benutzerdefinierte Methode definieren (getEnum
im folgenden Beispielcode), die den benötigten Wert zurückgibt, und Ihren Client so ändern, dass stattdessen diese Methode verwendet wird.quelle
Versuchen Sie dies, aber ich bin nicht sicher, ob das überall funktionieren wird :)
quelle
Sie können in Ihrer Aufzählung eine statische Map verwenden, die Strings Enum-Konstanten zuordnet. Verwenden Sie es in einer statischen Methode 'getEnum'. Dadurch wird die Notwendigkeit übersprungen, die Aufzählungen jedes Mal zu durchlaufen, wenn Sie eine von ihrem String-Wert erhalten möchten.
Stellen Sie einfach sicher, dass die statische Initialisierung der Karte unterhalb der Deklaration der Enum-Konstanten erfolgt.
Übrigens - dieser 'ImmutableMap'-Typ stammt aus der Google Guava-API, und ich empfehle ihn auf jeden Fall in solchen Fällen.
BEARBEITEN - Gemäß den Kommentaren:
quelle
RestartHere("replay"), ReplayHere("replay")
oder ohne 'Wert' wiePauseHere, WaitHere
(dh Enum hat einen Standardkonstruktor wieprivate RandomEnum() { this.strVal = null; }
Wie wäre es mit einer Java 8-Implementierung? (null kann durch Ihre Standardaufzählung ersetzt werden)
Oder Sie könnten verwenden:
quelle
Ich glaube nicht, dass Sie valueOf ("Start Here") zum Laufen bringen werden. Aber was die Leerzeichen betrifft ... versuchen Sie Folgendes ...
quelle
Das Folgende ist eine nette generische Alternative zu valueOf ()
quelle
compareTo()
eleganter alsequals()
für Streicher?.equals()
das gut funktionieren würde. Könnte verwenden,==
wenn Sie möchten. (Obwohl es ein guter Grund ist, dies nicht zuSie haben noch die Möglichkeit, Folgendes in Ihre Aufzählung zu implementieren:
quelle