Warum verursacht der folgende Code eine Ausnahme?Ändern der Enum-Werte
Ich muss Enum-Werte beibehalten, und ich rate die Best Practice für die Persistenz der Enum-Werte in der Datenbank ist es, sie als Kleinbuchstaben-Literale und damit diesen Aufwand zu speichern.
public enum Type {
SWIPE_BUTTON("swipe_button"), DROP_DOWN("drop_down"), RADIO_BUTTON("radio_button"), CHECK_BOX("check_box");
private final String label;
private Type (String label) {
this.label = label;
}
public String getValue() {
return label;
}
@Override
public String toString() {
return getValue();
}
public static Type getEnum (String value) {
for (Type type : values())
if (type.getValue().equals(value)) return type;
throw new IllegalArgumentException("invalid value for type");
}
public static void main (String[] args) {
System.out.println(Type.valueOf("swipe_button"));
}
}
Ich fand diesen Ansatz here.
UPDATE
Sieht aus wie ich im Wesentlichen die valueOf
Methode außer Kraft zu setzen versuchte, und die Antwort ist es nicht möglich ist, dies zu tun. Ich habe versucht, diese Methode zu überschreiben, so dass, wenn mein JPA-Datenbank-Mapper versucht, das Entitätsobjekt aus der Datenbank automatisch zu füllen, ich die kleineren String-Literale (in der Datenbank) in ihre oberen enum-Konstanten konvertieren kann. Ich werde erwidern, die Enums mit ihren eigenen Namen (d. H. Großbuchstaben) fortzuführen.
Da gibt es keine Typ-Instanz namens "swipe_button" '. Es gibt jedoch eine namens "SWIPE_BUTTON". –
Warum sollten Sie 'getEnum' definieren, wenn Sie es nicht nennen? –
sollte es sein 'Type.valueOf (" SWIPE_BUTTON ")' – NageN