Gibt es eine Möglichkeit, in Java bitweise ODER-enum zu enumerieren?
Habe ich mit Hilfe einer state-machine, die den code immer sehr ausführlich bei der Prüfung gegen eine große Anzahl an möglichen Zuständen.
enum Mood {
HAPPY, SAD, CALM, SLEEPY, OPTIMISTIC, PENSIVE, ENERGETIC;
}
Gibt es eine Möglichkeit, dies zu tun:
if (currentMood == (HAPPY | OPTIMISTIC | ENERGETIC) {}
Statt:
if (currentMood == HAPPY || currentMood == OPTIMISTIC || currentMood == ENERGETIC) {}
Oder wäre es besser, stick mit ganzen zahlen und Flaggen in diesem Fall?
Kommentar zu dem Problem
Du meinst
if ((currentMood & (FRÖHLICH | OPTIMISTISCH | ENERGETISCHE)) != 0) {}
. Oder vielleicht if (((1<<currentMood) & ((1<<HAPPY) | (1<<OPTIMISTISCH) | (1<<ENERGETISCHE))) != 0) {}
. Denke, ich bin glücklich, Sie haben, um es richtig zu machen. Ich Rückschlüsse auf die "ganze zahlen und Flaggen", dass man die currentMood kann mehr als eine Stimmung.
@Tom - ja, Sie sind technisch Recht. Ich war hin-und hergerissen zwischen schreiben im C-Stil bitweise Operationen oder eine set-Theorie type syntax.
@blizpasta - Das war nicht meine ursprüngliche Absicht, aber es wäre eine nützliche Verallgemeinerung. Sorry, mein Titel ist ein bisschen zweideutig da.
InformationsquelleAutor der Frage | 2011-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht so etwas wie EnumSet?
InformationsquelleAutor der Antwort Yet Another Geek
Geben Sie Ihren Enumerationen, die ein int-Attribut.
Auf dem wenn, testen gegen diese atrribute.
InformationsquelleAutor der Antwort Mario Marinato
Ja
InformationsquelleAutor der Antwort Stas Jaro
Abgesehen von den anderen Antworten: wenn, dass bestimmte Reihe von Staaten hat eine semantisch definierte Bedeutung in Ihrer Anwendung (ziemlich unabhängig von Ihrer speziellen Methode, spezifisch für die Enum) , würde ich empfehlen, zu enthalten, dass der test als eine Methode in der gleichen Enum-Klasse.
(oder statische Methode) implementiert werden, indem jede der Logik vorgeschlagen, die von den anderen Antworten (ich würde zugunsten der EnumSet, die statisch o träge instanziiert).
Haben die Methode im Enum ist nützlich, um code-Duplizierung vermeiden, sondern vor allem, um zu verhindern, dass Fehler in Fall, dass Sie Mitglieder hinzufügen, um die Enum zu ändern oder zu modifizieren.
InformationsquelleAutor der Antwort leonbloy
Könnten Sie Ihre enum-ein Boolesches flag, und testen Sie, dass.
Diese Art der Prüfung ist kurz
InformationsquelleAutor der Antwort josefx
Können Sie YourEnum.Werte()
Ich habe zum Beispiel Klasse namens Aufzählungen.
In es, ich habe mehrere Enum-Klassen.
Beispiel:
}
Wenn ich verwenden möchten, bitweise, ich benutze es so:
InformationsquelleAutor der Antwort Roy Doron
Wenn Sie || haben Sie beide Werte angeben, die Sie vergleichen jeder Zeit. Man könnte einfach schreiben Sie eine kleine Methode, um dies zu tun, obwohl.
InformationsquelleAutor der Antwort Hunter McMillen
Einen Ansatz haben EnumSet/switch/etc wenn. Dies macht dann Sinn, wenn Sie die Klassifizierung der Aufzählung in irgendeiner Weise, die nicht per se Teil der enumeration selbst. Zum Beispiel, ob eine Farbe ist Teil der nationalflagge die Farbe. Die 'Abhängigkeit-Modell" ist, dass die nationalflagge hängt von der Farbe, aber die Farbe nicht über die Existenz von nationalen Fahnen.
Auf der anderen Seite, wenn Sie versuchen, um zu bestimmen, ob eine Farbe eine Grundfarbe oder nicht (intrinsic to human Modell, Farbe), dann gehört er auf die enum-Klasse selbst. So,
InformationsquelleAutor der Antwort Dilum Ranatunga
Andere Möglichkeit:
InformationsquelleAutor der Antwort ejaenv