哪种方式在android上使用static更好

时间:2016-02-24 05:15:46

标签: android static

我正在开发一个Android应用程序。我对使用static用于dialogprogress baralert等自定义UI组件的两种方式感到困惑。

见下文。

public class UiUtils {

    public static void inputAlertDialogShow(Context context, final View view ,String message,DialogInterface.OnClickListener listener)
   {

    CustomDialog.Builder customBuilder = new
            CustomDialog.Builder(context);

    if(listener!=null) {
        customBuilder.setMessage(message).setPositiveButton(context.getResources().getString(R.string.dialog_confirm), listener);
    }else{
        customBuilder.setMessage(message).setPositiveButton(context.getResources().getString(R.string.dialog_confirm),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        if (view != null) view.requestFocus();
                    }
                });
    }
    customBuilder.create().show();
  }
}

我将方法显示为static方法。所以我可以调用自定义对话框到

这样的地方
UiUtils.inputAlertDialogShow(context, view, message, listener).

但我也可以像这样使用它

UiUtils ui = new UiUtils();
ui.inputAlertDialogShow(context, view, message, listener);

任何人都可以解释一下哪个更好,为什么?

5 个答案:

答案 0 :(得分:1)

实用程序不需要实例化。实用程序类的目的是提供常用函数,这就是为什么Utility类中的所有函数都是静态的,并且它们被称为Utility.functionName,因此最好调用UiUtils.inputAlertDialogShow(context, view, message, listener).

希望这有帮助。

答案 1 :(得分:1)

UiUtils.inputAlertDialogShow(context, view, message, listener).
  

直接像上面一样打电话,还有一件事要跟你一起回电   从任何活动或片段调用此函数时。

希望它会对你有所帮助!

答案 2 :(得分:0)

你不能这样做。当您将变量定义为静态时,您无法创建实例来访问它。 static是访问对象和方法而不创建实例的最佳方法。为什么要尝试创建实例?你知道通过一个实例,你保留了一些记忆吗?

答案 3 :(得分:0)

你需要考虑一件事,你在编写可测试的代码吗?如果你希望你的代码库是可测试的,那么静态方法就没有了,因为为了测试类的静态方法你需要使用PowerMock,基本的Mockito库不能模拟静态方法。所以为了使代码库可测试,你需要不使用静态方法并使用依赖注入将UiUtils类注入​​任何依赖于UiUtils的类

所以如果你想从理论上知道哪一个更好?那么不使用静态方法会更好,因为它会产生可测试的代码。

答案 4 :(得分:0)

你可以使用这两种方法。因为编译器会将其更改为静态调用,如

Class.methodToCall();

请参阅此SO answer

根据java实践,它建议不带对象调用。