Angenommen, ich habe eine Enumeration:Was ist der beste Weg, `next` und` previous` für einen Enum-Typ zu implementieren?
enum E {
A, B, C;
}
Wie in this answer von lucasmo werden in einem statischen Array in der Reihenfolge gespeicherten Werte Enum gezeigt, dass sie initialisiert werden, und Sie können später abgerufen werden (ein Klon) dieses Array mit E.values()
.
Jetzt nehme ich an E#getNext
und E#getPrevious
so implementieren möchten, dass alle folgenden Ausdrücke auswerten zu true
:
E.A.getNext() == E.B
E.B.getNext() == E.C
E.C.getNext() == E.A
E.A.getPrevious() == E.C
E.B.getPrevious() == E.A
E.C.getPrevious() == E.B
Meine aktuelle Implementierung für getNext
ist folgende:
public E getNext() {
E[] e = E.values();
int i = 0;
for (; e[i] != this; i++)
;
i++;
i %= e.length;
return e[i];
}
und eine ähnliche Methode für getPrevious
.
Allerdings scheint dieser Code umständlich besten (zB „leer“ for
Schleife, arguable Missbrauch einer Zählvariable und möglicherweise fehlerhaft im schlimmsten Fall (Denken Reflexion, möglicherweise).
Was wäre der beste Weg, zu implementieren getNext
und getPrevious
Methoden für enum-Typen in Java 7
HINWEIS: Meine Anfrage ich nicht die Absicht, diese Frage subjektiv zu sein für den „best“ Implemen. Es ist eine Kurzform, nach der Implementierung zu fragen, die am schnellsten, saubersten und am besten wartbar ist.
'E.C.getPrevious() == E.C' oder' E.C.getPrevious() == E.B'? – johnchen902
@ johnchen902 behoben; Entschuldigung – wchargin