2

次のコードでこのようなタイマー変数を使用する理由がわかりません。

質問 1: startTimer() と stopTimer() の両方で、タイマーの操作の前に使用されるローカル変数 aTimer がありますが、その意図は何ですか?

質問 2: stopTimer() では、タイマーに null が割り当てられるため、タイマーが null でない場合、つまりこのタイマーが既に作成されている場合、startTimer() が呼び出されたときに、タイマーは再度作成されません。タイマーが実行されているかどうかを確認するためのベスト プラクティスはありますか? null をタイマーに割り当てることで、PMD は "NullAssignment" の違反も報告します。

private Timer timer;

private void startTimer() {
  if (timer == null) {
    Timer aTimer = timerFactory.createTimer(100000, null);
    aTimer.setListener(this);
    timer = aTimer;
  }
}

private void stopTimer() {
  if (timer != null) {
    Timer aTimer = timer;
    timer = null;
    aTimer.cancel();
    aTimer.setListener(null);
 }
}

public void start() {
  synchronized(..) {
     startTimer();
  }
}

public void stop() {
 synchronized(..) {
     stopTimer();
 }
}
4

3 に答える 3