Die Java-enum-Werte
Wie ist der Wert eines enum berechnet? Funktioniert der compiler eine statische Wert? Welche Art von Wert es?
Der Grund warum ich Frage ist, weil ich Frage mich, was die Folgen der Verwendung von enum-Werte über einen tcp - (oder alle inter-Prozess) Verbindung wäre. (Von enum-Wert meine ich Enum.VALUE
) Natürlich würden Sie nicht in der Lage zu konstruieren Pakete kompatibel mit Ihrem Programm aus einer anderen Sprache, es sei denn, Sie wusste, dass die vorher festgelegten Werte der einzelnen enum. So ist es möglich, um herauszufinden, die "realen" Werte? Und zwei Java-Programme mit der gleichen enum - "Klassen" - Datei, die einander verstehen?
Dies ist rein theoretisch, bitte keine scoldings. Zeiger sind gut, wenn.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits erläutert, verlassen sich nicht auf die zugrunde liegenden Implementierungen. Stattdessen gestalten Sie Ihre enum zur Speicherung dieser Art von Informationen, die unter Ihrer Kontrolle sind. Stellen Sie sich vor Sie haben drei Befehle zu senden, um einige embedded-controller erfolgt schriftlich durch ein Bitmuster in einem register. Sie verwenden möchten, Enumerationen, um Ihnen ein high-level-Darstellung der Befehle, die aber an einem gewissen Punkt müssen Sie die lästigen bit-Muster:
Einfach anrufen
EmbeddedControllerCommand.FOO.getBitPattern()
um den Befehl Muster für die FOO Befehl.in Java-Enums haben integer-Referenz, die Java-Aufrufe Ordnungszahl. Zum Beispiel können Sie tun
yourEnumVariable.ordinal()
um die int Anzahl der enum-variable. Die Nummern zugeordnet sind, in einer Weise, die erste in der Liste bekommt die Nummer 0, der zweite die Nummer 1 und so weiter.Aber in deinem Fall klingt es wie Sie nicht sein sollte besorgt über das, was ist die interne Darstellung von enums. Sie sollten entscheiden, welche Art von Protokoll Sie verwenden, um Informationen zu übertragen. Danach kann man denken, wie man die übertragung enum-Werte. Sie haben wahrscheinlich trotzdem bauen einige mapping-Klassen für das Protokoll zum anzeigen von Java in das Protokoll.
Wenn Sie beziehen sich auf die Enum-JavaDoc können Sie Lesen, dass die Enum.ordinal() Methode gibt einen numerischen Konstanten Wert wird bestimmt durch die Reihenfolge der Enum-Deklarationen in der Klasse Datei.
Zum Beispiel, betrachten Sie diese enum-Konstanten sind in alphabetischer Reihenfolge:
Aber wenn wir hinzufügen, BANANE in Ihre alphabetische position, sehen, wie sich die Werte verändern würden, brechen Codes, die auf Ihnen beruht:
Dies bedeutet, dass, solange Sie die gleiche version der source-code, können Sie sich auf den zugrunde liegenden Wert der gleiche, und können es verwenden, für Situationen, in denen es keine anderen Optionen. Ich sage Nein, andere Optionen, denn indem Sie Ihren code abhängig von der Reihenfolge der Enumerationen, es macht den code zerbrechlicher sind, in der Erwägung, dass, wenn Sie nicht unter Berufung auf den ordinalen Wert Sie können die Reihenfolge vorhandener oder einfügen neuer enum-Konstanten werden.
Nun, würden Sie akzeptieren eine milde Schelte für nicht das Lesen der JavaDocs gründlich durch, bevor Sie posten? 🙂
Sollte man sich nicht verlassen, die pre-assinged Wert des enum-gegeben durch den Java-compiler. Andere Sprache, hat andere Regelung zum Umgang mit enum. In Java-enum behandelt werden können, wie Klassen und Objekte (nicht genau für den gleichen Zweck), so dass Sie können erstellen Sie einen Konstruktor in deinem enum und initialisieren Sie die enum um den Wert, den Sie wollen. Hier ist eine ziemlich klare Beispiele:
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html