Как исправить нарушение pmd «NullAssignment»?

Отчет PMD NullAssignment из следующего кода, что лучше всего исправить?

Присвоение объекта null является запахом кода. Рассмотрим рефакторинг.

Следующий код не написан мной, у меня также возникает вопрос о том, зачем создавать временный экземпляр таймера, а затем назначить этот экземпляр таймеру? startTimer и stopTimer будут использоваться в многопоточном контексте.

 private Timer timer; private void startTimer() { if (timer == null) { Timer aTimer = timerService.createTimer(DEFAULT_TIMER_VALUE, 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(); } } 

Этот код написан в ложном случае, полагая, что ссылка, которая установлена ​​в null – это garbage collection быстрее.

Поэтому сообщение из PMD заключается в том, что это ложное мнение было закодировано.

Это неверное предположение, поскольку сборщик мусора работает, когда память исчерпана, и он собирает все объекты, на которых нет ссылки.

Даже вызов System.gc() не приведет к запуску сборщика мусора. Вызов – это всего лишь намек на сборщик мусора, но когда сборщик мусора обнаруживает, что достаточно свободной памяти, он не будет работать.

  Assigning an Object to null is a code smell. 

ИМХО

После установки объекта / переменной в null вы можете вызвать System.gc() чего сборщик мусора запускается прямо сейчас.

Я считаю, что в этом не будет никаких нарушений и запаха кода.