次のコードでこのようなタイマー変数を使用する理由がわかりません。
質問 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();
}
}