Ich habe eine Funktion, die einen Typ int zurückgibt. Ich habe jedoch nur einen Wert der TAX-Aufzählung.
Wie kann ich den TAX-Aufzählungswert in ein int umwandeln?
public enum TAX {
NOTAX(0),SALESTAX(10),IMPORTEDTAX(5);
private int value;
private TAX(int value){
this.value = value;
}
}
TAX var = TAX.NOTAX; // This value will differ
public int getTaxValue()
{
// what do do here?
// return (int)var;
}
Antworten:
Sie müssten die Aufzählung
value
irgendwie aussetzen , z(Ich habe die Namen geändert, um sie etwas konventioneller und lesbarer zu machen, übrigens.)
Dies setzt voraus, dass Sie den im Konstruktor zugewiesenen Wert möchten. Wenn Sie dies nicht möchten, müssen Sie uns weitere Informationen geben.
quelle
Tax
und will den numerischen Wert von ihm bekommen.myEnumValue = MyEnum.valueOf(myInt);
Das Argument muss vom Typ String sein - oder fehlt mir etwas?Ich bevorzuge das:
dann:
quelle
.ordinal()
Wenn Sie den Wert möchten, den Sie im Konstruktor zuweisen, müssen Sie der Enum-Definition eine Methode hinzufügen, um diesen Wert zurückzugeben.
Wenn Sie eine eindeutige Nummer wünschen, die den Aufzählungswert darstellt, können Sie diese verwenden
ordinal()
.quelle
ordinal()
als gültige Anwendungsfälle stützenordinal()
. Wenn Sie einen eindeutigen Wert für das speichern müssen, speichern Sieenum
einfach dasenum
. Es gibt EnumSets, Listen von Enums, EnumMaps und fast jede andere Enum-Sammlung, die Sie möglicherweise zur Verfügung haben möchten.ordinal()
weil das OP nicht klar gemacht hat, was er wollte, dass der Int tatsächlich ist.ordinal()
die Leute über die Verwendung von intern innerhalb der Aufzählung selbst denken. Zum Beispiel, sagen , ich habe eine Enumeration „genanntSeason
“ , die die Werte enthaltenSpring
,Summer
,Autumn
, undWinter
, und es hat eine öffentliche Methode aufgerufen ,next()
die zurückgibtvalues()[(ordinal() + 1) % 4]
äußerlich sieht kein Code jemals die Ordnungszahl, und es wird nie zusätzliche Mitglieder in diesem Enum sein, es scheint also ein gültiger Anwendungsfall zu sein.ordinal()
Scharnieren für weit entfernten Code sehe , durch Änderungen an den Enum-Aufzählungskonstanten gebrochen werden. Wenn Sie die Konstanten der Aufzählung ändern möchten, müssen Sie sich bereits in dieser Datei befinden. Die meisten Aufzählungen sind ziemlich kurz, und wenn dies nicht der Fall ist, sollten Sie die Datei trotzdem gründlicher überprüfen. In beiden Fällen sollten Sie wahrscheinlichnext()
trotzdem einen Komponententest für Ihre Methode durchführen lassen.Manchmal erleichtert ein C # -Ansatz das Leben in der Java-Welt ..:
quelle
Vielleicht ist es besser, eine String-Darstellung als eine Ganzzahl zu verwenden, da der String weiterhin gültig ist, wenn der Aufzählung Werte hinzugefügt werden. Sie können die name () -Methode der Aufzählung verwenden, um den Aufzählungswert in einen String zu konvertieren, und die valueOf () -Methode der Aufzählung, um erneut eine Aufzählungsdarstellung aus dem String zu erstellen. Das folgende Beispiel zeigt, wie der Aufzählungswert in String und zurück konvertiert wird (ValueType ist eine Aufzählung):
quelle
quelle
Ein etwas anderer Ansatz (zumindest unter Android) besteht darin, die IntDef- Annotation zu verwenden, um eine Reihe von int-Konstanten zu kombinieren
Verwendung als Funktionsparameter:
oder in einer Variablendeklaration:
quelle