369 Stimmen

Umwandlung von enum ordinal in enum type

Ich habe den Enum-Typ ReportTypeEnum die zwischen Methoden in allen meinen Klassen übergeben werden, aber ich muss diese dann auf die URL übergeben, so dass ich die Ordinal-Methode verwenden, um den int-Wert zu erhalten. Nachdem ich ihn in meiner anderen JSP-Seite erhalten habe, muss ich ihn wieder in eine ReportTypeEnum damit ich es weitergeben kann.

Wie kann ich die Ordnungszahl in die ReportTypeEnum ?

Verwendung von Java 6 SE.

0voto

joe pelletier Punkte 389

Eine Möglichkeit besteht also darin, Folgendes zu tun ExampleEnum valueOfOrdinal = ExampleEnum.values()[ordinal]; was aber funktioniert und einfach ist, wie bereits erwähnt, ExampleEnum.values() gibt bei jedem Aufruf ein neues geklontes Array zurück. Das kann unnötig teuer sein. Wir können das Problem lösen, indem wir das Array wie folgt zwischenspeichern ExampleEnum[] values = values() . Es ist auch "gefährlich" zuzulassen, dass unser Cache-Array verändert wird. Jemand könnte schreiben ExampleEnum.values[0] = ExampleEnum.type2; Daher würde ich sie mit einer Accessor-Methode, die keine zusätzlichen Kopiervorgänge vornimmt, privat machen.

private enum ExampleEnum{
    type0, type1, type2, type3;
    private static final ExampleEnum[] values = values();
    public static ExampleEnum value(int ord) {
        return values[ord];
    }
}

Sie würden verwenden ExampleEnum.value(ordinal) um den Enum-Wert zu erhalten, der mit ordinal

-1voto

Tony BenBrahim Punkte 6668

Jede Aufzählung hat name(), die eine Zeichenkette mit dem Namen des Aufzählungsmitglieds liefert.

Gegeben enum Suit{Heart, Spade, Club, Diamond} , Suit.Heart.name() wird geben Heart .

Jedes Enum hat eine valueOf() Methode, die einen Enum-Typ und eine Zeichenkette annimmt, um die umgekehrte Operation durchzuführen:

Enum.valueOf(Suit.class, "Heart") gibt zurück. Suit.Heart .

Warum jemand Ordnungszahlen verwenden sollte, ist mir schleierhaft. Es mag Nanosekunden schneller sein, aber es ist nicht sicher, wenn sich die Enum-Mitglieder ändern, da ein anderer Entwickler möglicherweise nicht weiß, dass sich ein Code auf Ordinalwerte stützt (insbesondere in der in der Frage zitierten JSP-Seite dominiert der Netzwerk- und Datenbank-Overhead vollständig die Zeit, nicht die Verwendung einer Ganzzahl gegenüber einem String).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X