Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 访问常用函数静态?_Java_Android - Fatal编程技术网

Java 访问常用函数静态?

Java 访问常用函数静态?,java,android,Java,Android,我有一个可能更一般的问题,但我在android开发期间遇到了这个问题: 我如何才能最好地分享自己常用的方法? 例如,按键检索共享首选项的代码总是相同的。但如果我必须在不同的片段或活动中使用它,我总是必须复制相同的代码: private void setSharedPrefs(String key, String value) { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(conte

我有一个可能更一般的问题,但我在android开发期间遇到了这个问题:

我如何才能最好地分享自己常用的方法? 例如,按键检索共享首选项的代码总是相同的。但如果我必须在不同的片段或活动中使用它,我总是必须复制相同的代码:

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”类,如果它足够小的话