ユーザー設定用のストアを作成していますが、ユーザーが値を設定できる設定の数は決まっています。 設定(設定)の名前はEnumとして保存されます:
public enum UserSettingName {
FOO,
BAR,
ETC
}
私ができるようにしたいのは、サービスがユーザーの値を正しいJava型で保存できるように、値型を名前で保存することです。 たとえば、FOOはLong
で、BARはString
です。 これまでは、すべての値をString
として保存してから、値を適切なJava型に手動でキャストしていました。 これは、サービス内にtry / catchを1つだけ持つ方が理にかなっている場合に、どこでもtry / catchブロックにつながります。 私は列挙型がジェネリック型を持つことができないことを理解しているので、私は遊んでいます:
public enum UserSettingName {
FOO(Long.class),
BAR(String.class),
ETC(Baz.class)
private Class type;
private UserSettingName(Class type) {
this.type = type;
}
public Class getType() {
return this.type;
}
}
正しい型の値を返し設定するpublic T getSettingValue()
public void setSettingValue(T value)
メソッドとpublic void setSettingValue(T value)
メソッドを持つ一般的なUserSettingオブジェクトがあります。 私の問題は、次のようなことができないため、設定を作成または取得するときにそのジェネリック型T
を指定しようとすることから生じます。
new UserSetting<UserSettingName.FOO.getType()>(UserSettingName.FOO, 123L)
これが正確に明確でない場合は申し訳ありませんが、理解されていない場合は明確にすることができます。
ありがとう!
更新
設定の名前と値の両方は、Spring MVC REST呼び出しから取得されます。
public ResponseEntity<String> save(@PathVariable Long userId, @PathVariable UserSettingName settingName, @RequestBody String settingValue)
そこで、Springが着信データを自動的にキャストするため、Enumを使用しました。