次のコードはなぜ例外をスローしますか?列挙型の値を変更する
私は列挙型の値を永続化する必要があります。データベースの列挙型の値を永続化するためのベストプラクティスは、小文字の文字列リテラルとして格納することです。
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"));
}
}
このアプローチは、hereです。私は基本的にvalueOf
メソッドをオーバーライドしようとしていたよう
UPDATE
が見える、と答えは、そうすることができないからです。私はこのメソッドをオーバーライドしようとしていたので、JPAデータベースマッパーがデータベースからエンティティオブジェクトを自動的に移入しようとすると、大文字小文字のリテラル(データベース内)を大文字のenum定数に変換できます。私は列挙型を名前そのもの(すなわち大文字)で永続させることをレトルトします。
「swipe_button」という名前のTypeインスタンスが存在しないためです。しかし、SWIPE_BUTTONという名前のものがあります。 –
なぜあなたはそれを呼び出すつもりがない場合、 'getEnum'を定義するのが難しいですか? –
これは 'Type.valueOf(" SWIPE_BUTTON ")' – NageN