Как я могу создать короткую версию этого блока кода

#java

#java

Вопрос:

 new java.util.Timer().schedule(
  new java.util.TimerTask() {
    @Override
    public void run() {
      // my code is here card.getJLabel().setVisible(false);
      }
    }, 3000 // < my parameter);
  

Как я могу создать короткую функцию этого, я использую ее в разных функциях, поэтому было бы чисто, если бы я мог создать короткую версию этого.

Еще один, я довольно новичок в Java, так какой материал мне следует прочитать, чтобы узнать больше об этой конкретной теме. Спасибо, чувак 🙂

Ответ №1:

Предполагается, что то, что может измениться от одного вызова к другому, card должно быть скрыто и delay перед тем, как оно будет скрыто :

 public void hideCard(MyCard card, long delay){
  new java.util.Timer().schedule(
     new java.util.TimerTask() {
       @Override
       public void run() {
         card.getJLabel().setVisible(false);
       }
     }, delay);
  }
  

Вот хорошее начало для рефакторинга и рефакторинга с Eclipse.

Ответ №2:

Просто поместите этот фрагмент кода в отдельный метод и вызывайте метод каждый раз, когда вы хотите запустить фрагмент кода:

 public void scheduleHideCard() {
    new java.util.Timer().schedule(
        new java.util.TimerTask() {
            @Override
            public void run() {
                // my code is here card.getJLabel().setVisible(false);
            }
        }, 3000 // < my parameter);
}
  

…и вызвать метод, выполнив scheduleHideCard() .

Если вы используете Eclipse, вы даже можете выбрать фрагмент кода и выполнить Source -> Refactor -> Extract Method, и он позаботится об извлечении соответствующих параметров для вас.

В качестве дополнительного примечания: если вы используете несколько классов из java.util пакета, вам может потребоваться импортировать эти классы в начало файла:

 import java.util.*;
  

Ответ №3:

Если я правильно понимаю, вы хотите извлечь этот код в отдельный метод, подобный этому?

 void scheduleSomeActivity() {
  new java.util.Timer().schedule(...);
}
  

или, возможно, превратить, например, задержку в параметр:

 void scheduleSomeActivityWithDelay(long delay) {
  new java.util.Timer().schedule(..., delay);
}