Ich habe mir verschiedene Fragen und Antworten zu SO angesehen, die dieser Frage ähnlich sind, aber keine Lösung gefunden.
Was ich habe, ist eine Aufzählung, die verschiedene Möglichkeiten zum Anzeigen eines TV-Programmführers darstellt ...
In der NDroid- Application
Klasse
static enum guideView {
GUIDE_VIEW_SEVEN_DAY,
GUIDE_VIEW_NOW_SHOWING,
GUIDE_VIEW_ALL_TIMESLOTS
}
... wenn der Benutzer die Ansicht ändert, erhält ein Ereignishandler eine int
von 0-2 und ich möchte so etwas tun ...
In einem Android- Activity
onClick(DialogInterface dialog, int which)
Event-Handler
// 'which' is an int from 0-2
switch (which) {
case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY:
...
break;
}
Ich bin es gewohnt, C # -Aufzählungen und select / case-Anweisungen durchzuführen, die so etwas wie das oben Genannte zulassen, und ich weiß, dass Java die Dinge anders macht, aber ich kann einfach nicht verstehen, was ich tun muss.
Muss ich auf if
Aussagen zurückgreifen ? Es wird wahrscheinlich immer nur drei Möglichkeiten geben, damit ich es tun kann, aber ich habe mich gefragt, wie es mit Switch-Case in Java gemacht werden kann.
BEARBEITEN Es tut mir leid, dass ich das Problem nicht vollständig erweitert habe, da ich es als generisches Java-Problem angesehen habe. Ich habe die Frage ergänzt, um sie etwas näher zu erläutern.
Es gibt nichts, was Android-spezifisch ist, weshalb ich es nicht als Android Application
markiert habe, aber die Aufzählung ist in der Klasse definiert und der Code, in dem ich nicht wechseln möchte, befindet sich in einem Activity
. Die Aufzählung ist statisch, da ich von mehreren Aktivitäten aus darauf zugreifen muss.
quelle
case GUIDE_VIEW_SEVEN_DAY
nach ordnungsgemäßen Importen sein; Welche Probleme haben Sie?OnClickListener
) wird durch dieDialogInterface
Schnittstelle definiert , die ich implementieren muss.Antworten:
Der Teil, den Sie vermissen, konvertiert von der Ganzzahl in die typsichere Aufzählung. Java macht das nicht automatisch. Es gibt verschiedene Möglichkeiten, dies zu tun:
guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
Bestimmen Sie den Aufzählungswert, der durch den int-Wert dargestellt wird, und schalten Sie dann den Aufzählungswert ein.
Möglicherweise ist es hilfreicher / weniger fehleranfällig, eine benutzerdefinierte
valueOf
Implementierung zu schreiben , die Ihre ganzzahligen Werte als Argument verwendet, um den entsprechenden Aufzählungswert aufzulösen und die Überprüfung Ihrer Grenzen zu zentralisieren.quelle
case GuideView.SEVEN_DAY:
ein Kompilierungsfehler auftretencase SEVEN_DAY:
.Wenn
whichView
es sich um ein Objekt der GuideView-Enumeration handelt, funktioniert das Folgende gut. Bitte beachten Sie, dass es kein Qualifikationsmerkmal für die Konstante danach gibtcase
.quelle
Die Aufzählungen sollten innerhalb des Falletiketts nicht wie das, was Sie haben
NDroid.guideView.GUIDE_VIEW_SEVEN_DAY
, qualifiziert sein , sondern Sie sollten die Qualifikation entfernen und verwendenGUIDE_VIEW_SEVEN_DAY
quelle
Ich mag ein paar Verwendungen von Java-Enumeration:
Aufzählung mit Wertparametern:
Beispiel wechseln:
quelle
Dies sollte so funktionieren, wie Sie es beschreiben. Welchen Fehler bekommen Sie? Wenn Sie Ihren Code einfügen könnten, würde das helfen.
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
EDIT: Sind Sie sicher, dass Sie eine statische Aufzählung definieren möchten? Das klingt für mich nicht richtig. Eine Aufzählung ist wie jedes andere Objekt. Wenn Ihr Code kompiliert und ausgeführt wird, aber falsche Ergebnisse liefert, ist dies wahrscheinlich der Grund.
quelle
quelle
Beispiel für eine kurze assoziative Funktion:
Wie @Dhanushka sagte, lassen Sie das Qualifikationsmerkmal in "switch" weg, das ist der Schlüssel.
quelle
Ich mache es so
Und in Switch-Anweisung verwenden
quelle