我在考虑如何包装所有设置,例如我使用一次甚至更多。让我们想一点抽象。
class WholeApplicationSettingsInHere{
private static boolean setting1, setting2;
WholeApplicationSettingsInHere(){set defaults}
public static boolean getSetting1(){return setting1}
public static void setSetting1(setting1){set setting1}
public static boolean getSetting2(){return setting2}
public static void setSetting2(setting2){set setting2}
...
}
class One(){
/*No fields in here, except private fields*/
methodOne(){use variables from WholeApplicationSettingsInHere class}
methodTwo(){}
}
class Two(){
/*No fields in here, except private fields*/
methodOne(){use variables from WholeApplicationSettingsInHere class}
methodTwo(){}
}
我的问题是,以这种方式做事是否是一种好习惯?
答案 0 :(得分:1)
您应该PreferenceManager
和SharedPreferences
来存储和检索用户首选项。在课堂上使用静态布尔并不是一个好主意。
只需使用您的方法创建一个简单的类,例如:
public class PreferencesHelper {
private PreferencesHelper() {} // No instantiation
public static boolean getSetting1(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(PREFERENCE_KEY, defaultValue);
}
public static void setSetting1(Context context, boolean value) {
Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
editor.putBoolean(PREFERENCE_KEY, value);
editor.apply();
}
}
最后,回答你的问题:是的,如果你做了类似上面提到的代码,这可能是一种很好的做法。通过这样做,您就不可能在应用程序中分散首选项键,这样可以使代码更易于阅读。
话虽如此,如果您需要同时设置多个偏好设置,那么拨打setSetting1()
,setSetting2()
时会有点浪费,setSetting3()
等等,因为你一遍又一遍地重新创建对象。在这种情况下,只需获取Edtior对象,进行所有更改,然后应用更改。
答案 1 :(得分:0)
很难回答"这是一个很好的做法"因为没有一个确定的答案。这完全取决于您的背景。您可能希望提供一个MCVE,以更准确地反映您正在做的事情。
我会说将这些变量和方法设置为静态是一个非常可怕的想法 - 如果您想要设置类的两个实例,会发生什么?
在你说&#34之前,我只需要一个设置实例" - 你不能提前知道。这是对static关键字的误用。
在那一点上 - 为什么不只使用Properties类的实例?