静态方法是不好的做法?

时间:2017-08-08 13:09:31

标签: android class static

假设我为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);

这个选项对我来说实际上看起来很干净。我的问题是:这是一种不好的做法吗?为什么?(因为'我不经常看到这个')

谢谢!

0 个答案:

没有答案