java - 如何修复 pmd 违规 "NullAssignment"?

标签 java refactoring pmd

PMD 报告以下代码的 NullAssignment,修复它的最佳实践是什么?

将对象分配给 null 是一种代码味道。考虑重构。

下面的代码不是我写的,我还有一个疑问为什么要创建一个临时定时器实例,然后将这个实例分配给定时器? startTimerstopTimer 将在多线程上下文中使用。

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/

相关文章:

java - 对象不是本地创建的

java - 在枚举内部搜索

java - YUI 压缩器与 Granule

java - 抑制某些类别中的 PMD 违规

android - 在 Android 中正确使用继承

javascript - 如何重构javascript中的条件逻辑?

java - PMD 的完整形式是什么?

java - GAE 数据存储增量 ID

java - 在运行时创建新的 SOLR 集合

java - 如何处理jsps中的复杂性