我創造了用戶偏好的店,並且有用戶可設置的值偏好的固定數量。首選項(設置)的名稱被存儲爲一個枚舉:關聯泛型類型與枚舉在Java中
public enum UserSettingName {
FOO,
BAR,
ETC
}
我想做什麼就能做的是存儲與名稱的值類型,這樣的服務將用戶的價值存儲與正確的Java類型。例如,FOO可能是Long
,而BAR可能是String
。直到現在,我們將所有值存儲爲String
s,然後手動將值轉換爲適當的Java類型。這導致無處不在的try/catch塊,當在服務中只有一個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)
方法應該返回,並設置正確類型值的通用UserSetting對象。我的問題來自於努力,當我創建指定泛型類型T
或檢索設置,因爲我不能做這樣的事情:
new UserSetting<UserSettingName.FOO.getType()>(UserSettingName.FOO, 123L)
很抱歉,如果這是不完全清楚,我可以嘗試澄清,如果它是不明白。
謝謝!
UPDATE
兩個設置名稱和值從Spring MVC的REST調用進來:
public ResponseEntity<String> save(@PathVariable Long userId, @PathVariable UserSettingName settingName, @RequestBody String settingValue)
所以我用枚舉,因爲春節自動轉換傳入的數據。
如何重要的是它爲你使用'enum'?如果你可以使用'static final'字段,那麼有一個相當簡單的答案。 – StriplingWarrior
@StriplingWarrior並不重要,但它會減少代碼,因爲Spring MVC會自動轉換爲Enum。我將在我的問題中添加代碼 –