0

我正在做一个项目,我注意到我需要在几乎所有脚本中复制和粘贴相同的自定义方法。我在做什么错了吗?我一遍又一遍地复制它。任何帮助深表感谢。

样本:

public class EventHome extends Activity implements OnClickListener{

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    }

    /********************************************************************
    * SHORTENED TOAST                                                   *
    *********************************************************************/
    public void showToast(String value){
        Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show();
    }


    /********************************************************************
    * SHORTENED ALERTDIALOG                                             *
    *********************************************************************/
    public void showAlert(String title, String btn_txt, String message){
        final AlertDialog.Builder alert = new AlertDialog.Builder(EventHome.this);
        alert.setTitle(title).setMessage(message)
        .setNeutralButton(btn_txt, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   alert.setCancelable(true);
        }}).show();
    }
}
4

4 回答 4

2

创建一个助手类(让我们说Helper)并使用访问修饰符将所有重复方法移动到该类文件中 as public static。这样做将允许您以类名作为前缀调用方法。见下文:

public class Helper{

    /********************************************************************
    * SHORTENED TOAST                                                   *
    *********************************************************************/
    public static void showToast(Context context, String value){
        Toast.makeText(context, value, Toast.LENGTH_SHORT).show();
    }
}

现在,当您想显示 toast 时,在您的活动中调用以下内容:

Helper.showToast(this, "hello world!");
于 2012-04-11T09:09:13.463 回答
1

您可以使用库项目并将此类方法和类放入其中。有关管理 android 库项目的更多信息,请参阅此内容

于 2012-04-11T09:08:15.817 回答
1

有一个原则被称为DRY不要重复自己

重复代码没有用,而且容易出错。如果您希望修改重复代码中的行为,则必须在所有代码副本中对其进行修改。这很容易出错,因为代码很容易变得不同步。

于 2012-04-11T09:08:38.253 回答
1

这是相当脱离上下文的代码,所以很难给你一个明确的答案,但一般原则保持不变:不要重复代码。您应该致力于消除代码中所有形式的重复,尤其是在处理硬编码值时。这样做的常见方法是在其他类中提供静态函数,或者创建一个包含您将重复需要的所有核心功能的超类。下面是一个简短的例子,说明如何使用inheritanceabstract classes尽量减少代码重复:

IE

abstract class CoreMethods extends Activity implements OnClickListener
{

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    }

    /********************************************************************
    * SHORTENED TOAST                                                   *
    *********************************************************************/
    public void showToast(String value){
        Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show();
    }


    /********************************************************************
    * SHORTENED ALERTDIALOG                                             *
    *********************************************************************/
    public void showAlert(String title, String btn_txt, String message){
        final AlertDialog.Builder alert = new AlertDialog.Builder(EventHome.this);
        alert.setTitle(title).setMessage(message)
        .setNeutralButton(btn_txt, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   alert.setCancelable(true);
        }}).show();
    }

}

将其保存在名为 CoreMethods.java 或类似文件的文件中。然后,当您需要这些方法时,您可以简单地继承 CoreMethods 类并访问这些函数。

public class ExampleClass extends CoreMethods
{
     private void foo() {
         super.showToast("bar");
         super.showAlert("foobar");
     }
}

有关 Java 中继承的更多信息,请参见此处

于 2012-04-11T09:10:06.920 回答