Java - 类中的重复方法以及如何从另一个类中调用它们

Cas*_*ray 4 java methods class

我正在学习并热爱Java和Android,但还有很长的路要走.我认为这是一个最佳实践问题.在我的Android Activity中,我有6个课程.他们中的一些人正在调用我从另一个类复制的方法.当我可以从另一个类调用它们时复制方法似乎是多余的.我也认为将它们全部保存在一个类中会更容易.(主要活动,也许?)我的问题是:从多个班级调用同一个方法的最佳做法是什么?例如,说我的课程是:

主要活动GameSelector Game1Home Game1

我有几个方法在每个班级都是一样的.让我们称之为getPrefs()和setPrefs().我没有把任何东西传递给他们或他们.他们应该进入哪个班级,如何从其他班级打电话给他们?

编辑 - 感谢一些非常有用的答案我有一个功能齐全的Configurations类,而我的其他6个类看起来更干净!这将很容易维护,我在学习的过程中学到了一些很好的指导.我在这里发布我已完成的课程,以防它可以帮助其他任何人.您可以从其他类调用方法,如下所示:

Configurations.getPrefs(this);
Run Code Online (Sandbox Code Playgroud)

并在配置文件中引用您已定义为全局的静态变量,如下所示:

Configurations.buttonClicked.start();
Run Code Online (Sandbox Code Playgroud)

Configurations.java:

public class Configurations extends Activity {
static MediaPlayer buttonClicked;
static MediaPlayer instructionsAudio;
static MediaPlayer messageAudio;
static MediaPlayer correctNum_sound;
static MediaPlayer incNuma_sound;
static MediaPlayer incNumb_sound;
static String storeChildsName;
static String storeRequestedRange;
static String storeVoiceChoice;
static Intent i;


public static void setupPrefs(final Activity a) {
    ImageButton settingsClicked = ((ImageButton) a.findViewById(R.id.prefButton));
    settingsClicked.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                ImageView settingsClicked = ((ImageView) a.findViewById(R.id.prefButton));
                    settingsClicked.setImageResource(R.drawable.settings_button_clicked);
                buttonClicked = MediaPlayer.create(a, R.raw.click);
                    buttonClicked.start();

                    Intent settingsActivity = new Intent(a.getBaseContext(),
                                    Preferences.class);
                    a.startActivity(settingsActivity);
            }
    });
}
public static void getPrefs(final Activity a) {
    // Get the xml/preferences.xml preferences
    SharedPreferences prefs = PreferenceManager
                    .getDefaultSharedPreferences(a.getBaseContext());
    storeChildsName = prefs.getString("editTextPref",
                    "Friend");
    storeRequestedRange = prefs.getString("listPref", "3");
    storeVoiceChoice = prefs.getString("voices", "1");
}

public static void setupMusicToggle(final Activity a) {
    i=new Intent(a, MyMusicService.class);
       final ToggleButton togglebutton =(ToggleButton)a.findViewById(R.id.music_toggle);
      togglebutton.setOnClickListener(new OnClickListener() {  
          public void onClick(View v) {   
              // Perform action on clicks    
              if (togglebutton.isChecked()) {   
                  Toast.makeText(a, "Music on.", Toast.LENGTH_SHORT).show();  
                  a.startService(i);  
              } else {   
                  a.stopService(i);
                  Toast.makeText(a, "Music off.", Toast.LENGTH_SHORT).show(); 
                      }    }}); 
}

public static void returnHome(View view, Activity a) {
    ImageView homeClicked = (ImageView) a.findViewById(R.id.home);
    homeClicked.setImageResource(R.drawable.homebuttonclicked);
    buttonClicked = MediaPlayer.create(a, R.raw.click);
    buttonClicked.start();
    Intent intent = new Intent(a, GameSelector.class);
    a.startActivity(intent);
}

public static void releaseMP(Activity a) {
    if (buttonClicked != null) {
        buttonClicked.stop();
        buttonClicked.release();}
        if (instructionsAudio != null) {
            instructionsAudio.stop();
            instructionsAudio.release();}
        if (messageAudio != null) {
            messageAudio.stop();
            messageAudio.release();
        }
        if (correctNum_sound != null){
            correctNum_sound.stop();
            correctNum_sound.release();
        }
        if (incNuma_sound != null) {
            incNumb_sound.stop();
            incNuma_sound.release();
        }
        if (incNumb_sound !=null) {
            incNumb_sound.stop();
            incNumb_sound.release();
        }
}

public static boolean isMyServiceRunning(Activity a) {
    ActivityManager manager = (ActivityManager) a.getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (MyMusicService.class.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

}

希望这能帮助我,就像它帮助了我一样!

PS - 如果您在此代码中看到任何改进空间,请分享!我有很多东西需要学习=)

das*_*ght 6

有几种方法可以共享代码 - 你可以通过它来实现

  1. 定义"帮助器"类,并将static方法添加到其中,
  2. 定义基类(通常是抽象基类)并将方法添加到基类中,
  3. 定义一个非静态类,并在每个需要共享代码的类中嵌入该类的实例; 类也可以共享对公共实例的引用.

很难说哪种方法更合适,但从方法名称来看,您似乎计划获取和设置首选项.在这种情况下,带有共享实例的#1或#3通常是最合适的.