Java Enum Rückkehr Int
Ich habe Probleme mit der Deklaration einer enum. Was ich versuche zu erstellen ist ein enum-Element für eine 'DownloadType", wo es stehen 3 download-Formate (AUDIO, VIDEO, AUDIO_AND_VIDEO).
Implementierte ich den code wie folgt:
private enum DownloadType {
AUDIO(0), VIDEO(1), AUDIO_AND_VIDEO(2);
private final int value;
private DownloadType(int value) {
this.value = value;
}
}
Dies funktioniert gut, wenn dann verwende ich es wie folgt:
DownloadType.AUDIO_AND_VIDEO.value;
Aber ich würde es gerne so, dass ich mich nicht zu Fragen, für die 'Wert'. Ich kann mich irren, aber dies ist die Möglichkeit, mehrere Klassen arbeiten in Java wie Schriftart, zum Beispiel, setzen Sie eine schriftart, die Sie verwenden:
Font.PLAIN
Gibt einen int-Wert, den wir nicht verwenden:
Font.PLAIN.value
InformationsquelleAutor der Frage Cristian | 2012-12-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Font.PLAIN ist nicht enum. Es ist nur ein
int
. Wenn Sie brauchen, um den Wert aus einem enum, kann man nicht vermeiden, den Aufruf einer Methode oder mit einem.value
weil enums sind eigentlich Objekte seiner eigenen Art, nicht-primitive.Wenn Sie wirklich brauchen nur eine
int
und Sie sind bereits zu akzeptieren, dass die Typsicherheit verloren geht kann der Benutzer ungültige Werte übergeben, um Ihre API -, Sie kann definieren, die diese Konstanten alsint
auch:Durch die Art und Weise, die
value
Feld ist eigentlich redundant, da ist auch ein.ordinal()
Methode, so könnte man definieren, derenum
:bekommen und den "Wert" mit
Bearbeiten: Korrigiert den code..
static class
ist nicht erlaubt in Java. Sehen diese SO beantworten mit Erläuterungen und details zum definieren von statischen Klassen in Java.InformationsquelleAutor der Antwort kennytm
Wenn Sie brauchen, um den int-Wert, nur noch einen getter für den Wert im ENUM:
Oder Sie können einfach verwenden Sie die
ordinal()
Methode, die zurückkehren würde, die position der enum-Konstanten in der enum.InformationsquelleAutor der Antwort PermGenError
Zunächst sollten Sie sich Fragen, die folgende Frage: brauchen Sie wirklich ein int?
Zweck des enums ist eine Sammlung von Elementen (Konstanten), die eine Bedeutung haben, die in den code, ohne sich auf einen externen Wert (wie int). Enumerationen in Java verwendet werden kann, als argument auf der switch-Statements und Sie können sicher im Vergleich mit "==" Gleichheits-operator (unter anderem).
Vorschlag 1 (keine int benötigt) :
Oft gibt es keine Notwendigkeit für eine ganze Zahl dahinter.
Vorschlag 2 (int benötigt) :
Dennoch kann es manchmal sinnvoll sein, zur Umwandlung eines enum in int (zum Beispiel, wenn eine externe API erwartet, dass int-Werte). In diesem Fall würde ich raten, markieren Sie die Methoden, wie die Konvertierung Methoden, die die
toXxx()
-Stil. Für den Druck überschreibentoString()
.Zusammenfassung
ordinal()
für die Anreise eine ganze Zahl von enum ist, denn dieser Wert kann sich ändern, wenn Sie einen anderen enum-Konstante oder die Reihenfolge ändern.InformationsquelleAutor der Antwort yonojoy
Rufen Sie einfach die
ordinal()
Methode, die auf einem enum-Wert, zum abrufen der entsprechenden Anzahl. Es gibt keine Notwendigkeit zu erklären, ein Zusatz-Attribut mit seinem Wert, jedes aufgezählte Element bekommt seine eigene Nummer nicht standardmäßig zugewiesen, beginnend bei null, Inkrementieren, indem man für jeden Wert in der gleichen Reihenfolge wie Sie deklariert wurden.Sollten Sie sich nicht davon abhängen, die
int
Wert einesenum
nur auf den tatsächlichen Wert. Enumerationen in Java sind eine andere Art von monster und nicht wie Enumerationen in C, wo Sie verlassen sich auf Ihre integer-code.Bezug auf das Beispiel, das Sie in der Frage,
Font.PLAIN
funktioniert, weil das ist nur ein integer-Konstanten der Font-Klasse. Wenn du unbedingt eine (möglicherweise sich ändernden) numerische code, dann einenum
ist nicht das richtige Werkzeug für den job, bleiben Sie besser bei numerischen Konstanten.InformationsquelleAutor der Antwort Óscar López
Können Sie versuchen, diesen code .
Können Sie diese Aufzählung als wie dies :
DownloadType.AUDIO.ordinal()
. Hoffe das code-snippet, das Ihnen helfen wird .InformationsquelleAutor der Antwort osimer pothe
Wenn Sie verketten, das enum mit string ist, können Sie überschreiben die toString-Methode zum zurückgeben der int:
Dann könnte man einfach nutzen:
und die toString () - Methode aufgerufen wird.
Beachten Sie, dass die Verwendung von toString() programmgesteuert wird im Allgemeinen als schlechte Praxis - es ist bestimmt für menschliche Augen nur, dies ist jedoch der einzige Weg, das zu erreichen, was Sie gefragt haben.
InformationsquelleAutor der Antwort Bohemian
Willst du diesen code?
InformationsquelleAutor der Antwort seyeon