假设我为Android SharedPreferences
编写了一个小包装器:
public class ObjectSaver {
private SharedPreferences sharedPreferences;
private Gson gson;
public ObjectSaver(Context context){
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
gson = new Gson();
}
public void put(String key, Object o){
sharedPreferences.edit()
.putString(key, gson.toJson(o))
.apply();
}
public <T> T get(String key, Class<T> type){
return gson.fromJson(sharedPreferences.getString(key, null), type);
}
}
我会像这样使用它:
ObjectSaver saver = new ObjectSaver(this);
saver.put("user", new User("Me"));
User me = saver.get("user", User.class);
哪个不错,但我每次都需要初始化课程。 (我知道我可以使用Dagger但是无论如何)
为了克服这个问题,我可以将每个方法设置为静态:
public class ObjectSaver {
private static SharedPreferences sharedPreferences;
private static Gson gson;
public static void init(Context context) {
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
gson = new Gson();
}
public static void put(String key, Object o){
sharedPreferences.edit()
.putString(key, gson.toJson(o))
.apply();
}
public static <T> T get(String key, Class<T> type){
return gson.fromJson(sharedPreferences.getString(key, null), type);
}
}
在这种情况下,我只能初始化一次:
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
ObjectSaver.init(this);
}
}
然后在其他地方使用它:
ObjectSaver.put("user", new User("Me"));
User me = ObjectSaver.get("user", User.class);
这个选项对我来说实际上看起来很干净。我的问题是:这是一种不好的做法吗?为什么?(因为'我不经常看到这个')
谢谢!