1
背景信息:枚舉包裝類型安全
有時你需要分享一些全球性的偏好在你的Android應用程序,一個選擇是使用SharedPreferences做到這一點;
//get the preferences
SharedPreferences prefs = myActivity().getSharedPreferences(「ConfigurationStore」, Context.MODE_PRIVATE);
//store a value
prefs.edit().putString(「user」, 「Teddy」).commit();
//get the value
prefs.getString(「user」, null);
我喜歡我的代碼簡單,所以我寫了一個包裝來隱藏上面,這裏是結果。
public enum ConfigurationStore {
USER(「user」);
private String key;
private SharedPreferences prefs = //get this from your activity class
ConfigurationStore(String key){
this.key = key;
}
public String get(){
return prefs.getString(key, null);
}
public void set(String value){
prefs.edit().putString(key, value).commit();
}
}
包裝的使用如下所示
//Set a value:
ConfigurationStore.USER.set("Teddy");
//get a value
ConfigurationStore.USER.get()
可以很容易地用新的特性剛好延伸通過向枚舉:
public enum ConfigurationStore {
USER(「user」),
DEPLOYMENT_TYPE(「deployment_type」);
....
//Set a value:
ConfigurationStore.DEPLOYMENT_TYPE.set("Beta-test");
//get a value
ConfigurationStore.DEPLOYMENT_TYPE.get()
問題:
枚舉嚴格處理字符串屬性。 有沒有辦法讓這個枚舉可以安全地處理不同的類型而無需添加其他方法簽名(getStringValue,getIntValue)?
我希望能夠做一些事情,如:
int age = 23;
String name = "Teddy"
ConfigurattionStore.AGE.set(age)
ConfigurattionStore.NAME.set(name)
...
age = ConfigurattionStore.AGE.get();
name = ConfigurattionStore.NAME.get();
枚舉應該是一個一組常量。另一方面,你似乎將它們用作變量,但是使用名稱空間。然後簡單的類有什麼問題? –
隨時隨地訪問表格很容易,無需傳遞。使用枚舉作爲實現單例模式的一種方式。 – daljian