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();
}
}
最佳答案
在搜索其他信息时看到这篇文章,并注意到以前的答案都不正确(IMO)。
所提供代码中的 null 分配的原因显然与垃圾收集无关,而是与能够停止并重新创建新计时器有关,一次只能有一个计时器。
我没有看到在 stopTimer
方法上使用临时变量的任何原因,但看起来与原始问题无关。
我想说这段代码很好,可以添加 SuppressWarnings("PMD.NullAssignment")
注释来避免违规; PMD 只是强调空赋值通常是一种味道,而不是任何问题的事实。
关于java - 如何修复 pmd 违规 "NullAssignment"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17590281/