Hallo,
kann man (etwas kompliziert formuliert) -- wenn ja wie -- Enums mit einer switch Bedingung verwenden, die nicht direkt ein Enum Abfragt?
Mit "direkt ein Enum abfragt" meine ich den "klassischen" Ansatz:
Aber wie funktioniert das, wenn die Information von einer Funktion und nicht einer Varible des Enums übergeben wird?
Das ist zwar Android spezifischer Code, tut aber dem allgemeinen Charakter der Frage keinen Abbruch, denke ich.
kann nur Werte enthalten, die von einem Enum kommen, aber leider funktioniert der Code nicht -- zumindest gibt mir Eclipse eine Fehlermeldung:
.
Das liegt wohl an der Verwendung von .ordinal()
Geht auch nicht, da das switch wohl als Parameter eine Instanz des Enums braucht, damit die Werte zugänglich sind.
Ich denke, es liegt im Prinzip daran, dass das switch über ein int und nicht über ein Enum läuft, richtig?
Wie kann ich das Enum aus dem int wiederherstellen, um es über switch laufen zu lassen? Ich habe leider keine Methode hierfür gefunden.
Oder wählt man bei sowas einen anderen Ansatz?
Gruß
kann man (etwas kompliziert formuliert) -- wenn ja wie -- Enums mit einer switch Bedingung verwenden, die nicht direkt ein Enum Abfragt?
Mit "direkt ein Enum abfragt" meine ich den "klassischen" Ansatz:
Java:
enum Options {
ADD, EDIT, DELETE, RENAME
};
Options opt = Options.DELETE;
switch (opt) {
case ADD:
break;
case DELETE:
break;
}
Aber wie funktioniert das, wenn die Information von einer Funktion und nicht einer Varible des Enums übergeben wird?
Java:
private enum Options {
ADD, EDIT, DELETE, RENAME
};
public void onCreateContextMenu(ContextMenu menu) {
menu.add(0, Options.EDIT.ordinal(), 1, "Menge ändern");
menu.add(0, Options.DELETE.ordinal(), 1, "Löschen");
}
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Options.EDIT.ordinal():
// do something
break;
}
case Options.DELETE.ordinal():
// do something
break;
}
}
Das ist zwar Android spezifischer Code, tut aber dem allgemeinen Charakter der Frage keinen Abbruch, denke ich.
Code:
item.getItemID()
Code:
case expressions must be constant expressions
Das liegt wohl an der Verwendung von .ordinal()
Java:
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case EDIT:
// do something
break;
}
case DELETE:
// do something
break;
}
}
Geht auch nicht, da das switch wohl als Parameter eine Instanz des Enums braucht, damit die Werte zugänglich sind.
Ich denke, es liegt im Prinzip daran, dass das switch über ein int und nicht über ein Enum läuft, richtig?
Wie kann ich das Enum aus dem int wiederherstellen, um es über switch laufen zu lassen? Ich habe leider keine Methode hierfür gefunden.
Oder wählt man bei sowas einen anderen Ansatz?
Gruß
Zuletzt bearbeitet: