如何解决 pmd 违规“NullAssignment”?

2023-12-12

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

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

下面的代码不是我写的,我也有一个疑问为什么要创建一个临时定时器实例,然后将这个实例分配给定时器?startTimer and 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)。

所提供的代码中进行空分配的原因显然与垃圾收集无关,而是与能够停止并重新创建新计时器有关,一次只能有一个计时器。

我不认为有任何理由使用临时变量stopTimer方法,但看起来与原始问题无关。

我想说这段代码很好,而且SuppressWarnings("PMD.NullAssignment")可以添加注释以避免违规; PMD 只是强调空赋值通常只是一种味道,而不是任何问题的事实。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决 pmd 违规“NullAssignment”? 的相关文章

随机推荐

  • 在 JavaScript 中获取工作日的下一个日期

    如何才能返回下一个date给定工作日的日期 可以是数字 0 6 或名称 Sunday Saturday 例如 如果今天 在2009 年 10 月 16 日星期五我通过了 Friday 它将返回今天的日期2009 年 10 月 16 日 Sa
  • 删除 Mongo 集合不会清理磁盘空间

    我有一个包含 750 000 个文档的集合 它占用了大约 7Gb 的磁盘空间 我已经删除了该集合 但是文件 test 0 test 11 仍然在磁盘上 如果我删除它们 那么我会丢失所有集合 而不仅仅是我删除的集合 Mongo 不应该删除它们
  • 为什么Java 6重写SortedMap中的keySet()、entrySet()和values()接口

    Java 5 http docs oracle com javase 1 5 0 docs api java util SortedMap html Java 6 https docs oracle com javase 6 docs ap
  • iOS 如何检测用户是否使用 home+power 进行了截图?

    我正在尝试检测用户是否截取屏幕截图 以警告他们这是一个受版权保护的视频 我尝试过达尔文通知 但它不起作用 NSMetadataQuery 可能是一个解决方案 但我们希望该应用程序也能在 iOS4 上运行 有人可以帮助我吗 谢谢 p 无法检测
  • SignalR 连接无法启动到 IIS 托管的应用程序

    我制作了一个应用程序 并尝试通过 SignalR 连接到后端 ASP NET Core 3 1 后端托管在 IIS 中 以便于开发 在客户端上调用 StartAsync 方法成功协商 但随后在 GET 上永远挂起 GET http loca
  • 使用 Jackson 忽略字段而不修改 POJO 类

    我的 POJO 类有 JsonIgnore在字段的声明上 而不是在 getter 和 setter 方法上 这是一个生成的文件 我无法对其进行太多更改 如何在使用时忽略该字段JsonGenerator Setting Using JsonI
  • 所有 tkinter 函数在程序启动时运行

    我在使用 tkinter 时遇到了一个以前从未遇到过的非常奇怪的问题 在任何地方为小部件 例如按钮或菜单项 设置命令时 该命令都会在应用程序启动时运行 基本上 该命令不会等到单击小部件才运行 在我的代码中 我知道我没有打包按钮 这是为了表明
  • 有没有更好的方法来迭代行(30000)的嵌套循环?

    我想在下表中找到包含重复电子邮件地址的行 当电子邮件地址重复时 我在以下代码的数据框中创建一个额外的列 其值为 ja 这对于少量行 150 来说很好 对于大量行 30000 脚本会挂起 有更好的方法来循环行吗 import pandas a
  • Scrapy:是否可以暂停Scrapy并在x分钟后恢复?

    我正在尝试抓取一个大型网站 他们有一个速率限制系统 scrapy是否可以在遇到403页面时暂停10分钟 我知道我可以设置一个 DOWNLOAD DELAY 但我注意到我可以通过设置一个小的 DOWNLOAD DELAY 来更快地抓取 然后在
  • Swift,从字符串中获取变量名称

    我有个问题 我知道这可以在 Ruby 中完成 不确定 Swift 是否可以 但从未做过类似的事情 我正在开发的程序的工作原理与此类似 如果用户在 TextView 中写入 a b 我的代码应该详细说明变量 a 和 b 之间的总和值 我的意思
  • 如何在postgres中根据IF条件删除表?

    我试图根据条件在启动时删除表 IF NOT EXISTS select from pg class where relname mytable and relpersistence u DROP TABLE IF EXISTS mytabl
  • 什么时候使用嵌套 Java 类真正有用?

    你能给我一个嵌套java类有用的具体例子吗 我正在研究它 我了解它是如何工作的 但我无法想象真正需要使用它的真实情况 太感谢了 Marco 关于何时使用嵌套类的最简洁的总结是 当该类在逻辑上是外部类 API 的一部分时 或者当它封装特定于外
  • 如何选择 ID 中包含特殊字符的元素?

    我有一个带有网格的页面 其中包含很多如果使用 奇怪的名称 输入来模拟数组
  • 如何知道 Flutter 中的 Nested Widget 内部发生了 pop 事件

    我目前正在构建应用程序 我需要使用嵌套路由来保持一个屏幕相同并在不同的屏幕上进行路由 我想当第二条路线弹出时 以便我可以更改扩展的值以填充整个屏幕 Github 中的要点 这是代码示例 import package flutter mate
  • R:如何从数据框中提取列表?

    考虑这个简单的例子 gt weird df lt data frame col1 c hello world again col weird list list 12 23 list 23 24 NA gt gt weird df A ti
  • 污染玫瑰图网格

    我正在尝试创建一个污染玫瑰图 如链接中所述绘制 Windrose 制作浓度设置为颜色的污染玫瑰 回复中的示例有效 但是当我使用我的数据时 它给出了一个奇怪的图 有什么建议我哪里出错了吗 谢谢 import matplotlib pyplot
  • 使用带有子域的邮递员时出现“无法得到任何响应”响应

    我正在使用邮递员来测试我拥有的 API 当请求不包含子域时一切都很好 但是当我向 URL 添加子域时我收到此响应 无法得到任何回应 连接时出错http 子域名 localhost 端口 api 为什么会发生这种情况 服务器无法发送响应 确保
  • Sql 查询中的新行

    如何在 Sql 查询中获取新行或换行符 Pinal Dave 在他的博客中对此做了很好的解释 http blog sqlauthority com 2009 07 01 sql server difference Between line
  • 删除 Bootstrap 4 行列中的等高

    我目前正在尝试新版本引导程序 当使用更新的网格系统使用此代码分割两列时 JSFiddle div class row div class col lg 4 col md 4 col sm 4 hidden xs down Some cont
  • 如何解决 pmd 违规“NullAssignment”?

    PMD报告NullAssignment以下代码 修复它的最佳实践是什么 将对象分配给 null 是一种代码味道 考虑重构 下面的代码不是我写的 我也有一个疑问为什么要创建一个临时定时器实例 然后将这个实例分配给定时器 startTimer