Bei der Arbeit mit Variablen / Parametern, die nur eine begrenzte Anzahl von Werten annehmen können, versuche ich, immer Java zu verwenden enum
, wie in
public enum BonusType {
MONTHLY, YEARLY, ONE_OFF
}
Solange ich in meinem Code bleibe, funktioniert das einwandfrei. Ich muss jedoch häufig eine Schnittstelle zu anderem Code herstellen, der einfache int
(oder String
) Werte für denselben Zweck verwendet, oder ich muss aus / in eine Datenbank lesen / schreiben, in der die Daten als Zahl oder Zeichenfolge gespeichert sind.
In diesem Fall hätte ich gerne eine bequeme Möglichkeit, jeden Aufzählungswert mit einer Ganzzahl zu verknüpfen, sodass ich beide Möglichkeiten konvertieren kann (mit anderen Worten, ich benötige eine "umkehrbare Aufzählung").
Von enum nach int zu wechseln ist einfach:
public enum BonusType {
public final int id;
BonusType(int id) {
this.id = id;
}
MONTHLY(1), YEARLY(2), ONE_OFF(3);
}
Dann kann ich auf den int-Wert als zugreifen BonusType x = MONTHLY; int id = x.id;
.
Ich sehe jedoch keinen guten Weg für das Gegenteil, dh von int nach enum. Im Idealfall so etwas wie
BonusType bt = BonusType.getById(2);
Die einzigen Lösungen, die ich finden könnte, sind:
- Fügen Sie eine Suchmethode in die Aufzählung ein, die verwendet
BonusType.values()
eine Karte "int -> enum" gefüllt wird, speichern Sie diese dann zwischen und verwenden Sie sie für Suchvorgänge. Würde funktionieren, aber ich müsste diese Methode identisch in jede von mir verwendete Aufzählung kopieren :-(. - Fügen Sie die Suchmethode in eine statische Dienstprogrammklasse ein. Dann würde ich nur eine "Nachschlage" -Methode benötigen, aber ich müsste mit der Reflexion herumspielen, damit sie für eine beliebige Aufzählung funktioniert.
Beide Methoden scheinen für ein so einfaches (?) Problem furchtbar umständlich.
Irgendwelche anderen Ideen / Einsichten?
ordinal()
.ordinal()
) oder werden sie von externen Kräften festgelegt?