Java 访问常用函数静态?
我有一个可能更一般的问题,但我在android开发期间遇到了这个问题: 我如何才能最好地分享自己常用的方法? 例如,按键检索共享首选项的代码总是相同的。但如果我必须在不同的片段或活动中使用它,我总是必须复制相同的代码:Java 访问常用函数静态?,java,android,Java,Android,我有一个可能更一般的问题,但我在android开发期间遇到了这个问题: 我如何才能最好地分享自己常用的方法? 例如,按键检索共享首选项的代码总是相同的。但如果我必须在不同的片段或活动中使用它,我总是必须复制相同的代码: private void setSharedPrefs(String key, String value) { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(conte
private void setSharedPrefs(String key, String value) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = settings.edit();
editor.putString(key, value).commit();
}
在GlobalUtils类中将此设置为公共静态
是一个好习惯吗?
您将如何处理这类函数?您完全可以创建一个静态类,例如GlobalUtils,甚至可以为
共享引用创建一个专用类。您只需将上下文
传递给该方法,就可以获得共享引用
对象。你可以把它带到你需要的地方;我上过无数次这样的课。我甚至有一个线程安全的SharedReferences
wrapper:-)
EDIT:刚刚再次查看了我的代码,我的SharedReference
包装器中有一半是静态的,其余的是惰性实例化的。话虽如此,我认为只要代码的其余部分不需要以这种或那种方式运行,您就应该做任何您觉得合适的事情。我通常在不同类的静态方法中编写通用代码。这样我就可以在项目中的任何地方调用static方法,而无需每次创建新的类对象。是的,您可以将其公开为static:
public static void setSharedPrefs(Context context, String key, String value) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = settings.edit();
editor.putString(key, value).commit();
}
在某些情况下,如果您可能在某个活动结束后仍保留上下文,请小心,这是不好的
您描述的更可能的场景是创建如下类:
public class MyPrefs {
SharedPreferences settings;
SharedPreferences.Editor editor;
public MyPrefs(Context context){
settings = PreferenceManager.getDefaultSharedPreferences(context);
editor = settings.edit();
}
public void saveName(String name){
editor.putString("name", name).commit();
}
}
您可以在扩展应用程序的类中惰性地初始化该类,并在其中使用一个getter来检索它,如下所示:
MyPrefs prefs = ((MyAppication) getContext().getApplicationContext()).getMyPrefs();
并像这样使用它:
prefs.saveName("blundell");
编辑
延迟初始化示例:
private MyPrefs prefs;
public MyPrefs getMyPrefs(){
if(prefs == null){
prefs = new MyPrefs(this);
}
return prefs;
}
N.B这是扩展应用程序的类中的惰性初始化
,因此此
引用应用程序上下文,并在应用程序期间有效。如果使用活动上下文,则不希望使用惰性初始化。(所以使用应用程序上下文!)这似乎非常合适。但是你说的lazyint是什么意思?我想我必须初始化:MyPrefs prefs=newmyprefs(context)。。。prefs.saveName(…)代码>Lazy init意味着您在实际需要它之前不会初始化它的实例。警告:如果滥用,这可能是一种代码味道。尽量让这些东西有条理,而不是把所有的东西和厨房水槽都扔进一个“utils”类。我喜欢把我的utils类分开,即使它们只有几个,而且非常小,但有些人喜欢有一个“GlobalUtils”类,如果它足够小的话