这些 PMD 规则的原因是什么?

2024-03-07

数据流异常分析:已找到 “DD”-变量“变量”异常 (行“n1”-“n2”)。

数据流异常分析:已找到 “DU”-变量“变量”异常 (行“n1”-“n2”)。

DD 和 DU 听起来很熟悉...我想说的是与最弱的前后条件相关的测试和分析之类的事情,但我不记得具体细节了。

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

不会将对象设置为null如果该对象是本地对象(未在方法外部使用),则协助垃圾收集?或者这是一个神话?

MethodArgumentCouldBeFinal:参数 'param' 未分配,可能是 宣布最终

LocalVariableCouldBeFinal:本地 可以声明变量“变量” 最终的

使用有什么好处吗final参数和变量?

松耦合:避免使用 实现类型如 '链表';使用界面 反而

如果我知道我特别需要一个LinkedList,为什么我不使用它来向未来的开发人员明确表达我的意图?返回有意义的类路径最高的类是一回事,但为什么我不将我的变量声明为最严格的意义呢?

避免SynchronizedAtMethodLevel:使用 块级而不是方法级 同步

块级同步相对于方法级同步有什么优势?

避免使用ShortType:不要使用 短型

我的第一种语言是 C 和 C++,但在 Java 世界中,为什么我不应该使用最能描述我的数据的类型呢?


  • DD 和 DU 异常(如果我没记错的话 — 我使用 FindBugs 并且消息有点不同)是指为从未读取的局部变量分配一个值,通常是因为它在被读取之前被重新分配了另一个值。一个典型的情况是初始化一些变量null当它被宣布时。在需要之前不要声明变量。 https://stackoverflow.com/questions/110083/which-loop-has-better-performance-why/110389#110389

  • 分配null为了“协助”垃圾收集器而使用局部变量是一个神话。 PMD 让您知道这只是适得其反的混乱。

  • 在局部变量上指定finalshould对于优化器来说非常有用,但我没有任何当前 JIT 利用此提示的具体示例。我发现它对于推理我自己的代码的正确性很有用。

  • 指定接口......嗯,接口是一个很棒的设计实践。您可以轻松更改集合的实现,而根本不会影响调用者。这就是接口的意义所在。

  • 我想不出很多情况来电者会require a LinkedList,因为它不会公开任何未由某个接口声明的 API。如果客户端依赖该 API,则可以通过正确的接口使用它。

  • 块级同步允许关键部分更小,从而允许同时完成尽可能多的工作。也许更重要的是,它允许使用由封闭对象私有控制的锁对象。这样,就可以保证不会发生死锁。使用实例本身作为锁,任何人都可以错误地同步它,从而导致死锁。

  • 类型操作数short被提升为int在任何操作中。这条规则是让你知道这个促销活动正在进行,你不妨使用int。然而,使用shorttype 可以节省内存,因此如果它是实例成员,我可能会忽略该规则。

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

这些 PMD 规则的原因是什么? 的相关文章

  • 正确配置JDK环境变量后仍然找不到java命令

    我在 Windows 虚拟机启动时安装 JDK 使用 cloudinit 用户数据将 PowerShell 脚本传输到 Windows 计算机 然后运行该脚本来安装 JDK softwares Get ItemProperty HKLM S
  • Java Sqlite Gradle

    我对 gradle 和 java 还很陌生 我有一个使用 sqlite 的项目 它通过 intellij idea 运行良好 但我无法从终端运行它 它会抛出异常 java lang ClassNotFoundException org sq
  • Java - 从配置文件加密/解密用户名和密码

    我们正忙于为客户开发 Java Web 服务 有两种可能的选择 将加密的用户名 密码存储在Web服务客户端上 从配置中读取 文件在客户端 解密并发送 将加密的用户名 密码存储在 Web 服务器上 从配置中读取 Web 服务器上的文件 解密并
  • 在 Tomcat 上部署 Java Web 项目,无需 WAR 或 EAR

    我有一个 Java Web 项目 Struts Spring 在我的本地主机上完美运行 我必须将其部署在我的网站上 但虚拟主机提供的 Tomcat Manager 界面显示 由于安全原因 它无法上传 WAR 文件 当联系技术支持时 我被告知
  • 以点作为分隔符分割字符串

    我想知道我是否要在一个字符串上分割字符串 正确的方式 我的代码是 String fn filename split return fn 0 我只需要字符串的第一部分 这就是我返回第一项的原因 我问这个是因为我在 API 中注意到 意味着任何
  • Maven 目标的默认阶段?

    据我了解 在 Maven 中 插件目标可以附加到生命周期阶段 如果没有定义 默认阶段是什么 根据我的经验 这取决于插件的目标 例如 组装 单个 http maven apache org plugins maven assembly plu
  • 动画图像视图

    目前我正在开发一款游戏 这是我的游戏的详细信息 用户应选择正确的图像对象 我希望图像从左到右加速 当他们到达终点时 他们应该再次出现在活动中 这是我正在处理的屏幕截图 我有 5 个图像视图 它们应该会加速 您有此类动画的示例代码吗 非常感谢
  • FFmpeg 不适用于 android 10,直接进入 onFailure(String message) 并显示空消息

    我在我的一个项目中使用 FFmpeg 进行视频压缩 在 Android 10 Google Pixel 3a 上 对于发送执行的任何命令 它会直接进入 onFailure String message 并显示空消息 所以我在我的应用程序 g
  • 通过 JNI 从 Applet 调用 DLL

    我有一个 概念验证 的作品 它跨越了一些不熟悉的领域 我的任务是将 EFTPOS 机器连接到在内联网浏览器中作为小程序运行的应用程序 我暂时忽略了 EFTPOS dll 并用我选择的语言 Delphi 创建了一个简单的 JNI 修饰的 DL
  • 此版本不符合 Google Play 64 位要求,添加库后仍然出现错误

    我正在 Play 商店上传一个视频编辑器应用程序 其中包含带有一些本机代码的库 所以我通过将其添加到 gradle 来使其兼容 64 位 ndk abiFilters armeabi v7a arm64 v8a x86 x86 64 添加了
  • 更改 JTextPane 的大小

    我是Java新手 刚刚在StackOverflow中找到了这段代码 ResizeTextArea https stackoverflow com questions 9370561 enabling scroll bars when jte
  • 如何使用 BufferedReader 对象从 Java 中的一行读取多个整数值?

    我正在使用 BufferedReader 类读取 Java 程序中的输入 我想读取用户的输入 该用户可以在带空格的单行中输入多个整数数据 我想读取整数数组中的所有这些数据 输入格式 用户首先输入他 她想要输入的数字数量 然后在下一行中使用多
  • 如何在Gradle中支持多种语言(Java和Scala)的多个项目?

    我正在尝试将过时的 Ant 构建转换为 Gradle 该项目包含约50个Java子项目和10个Scala子项目 Java 项目仅包含 Java Scala 项目仅包含 Scala 每个项目都是由 Java 和 Scala 构建的 这大大减慢
  • 如何获取 Android 中临时文件的文件大小?

    如果我使用 openFileOutput 创建并写入临时文件 写入完成后如何获取文件大小 我希望这可以帮助你 File file new File selectedPath int file size Integer parseInt St
  • 如何在 Java 中创建要打印到 JFrame 的 JLabels 数组

    我正在尝试制作一系列标签 每个标签都有一个来自函数的不同值 我不知道要使用的标签的确切数量 我的意思是可以打印任意数量的值 请帮我做这件事 很简单 只需一个方法返回一个数组或一些 JLabels 集合 并将它们全部添加到您的 JCompon
  • 使用 Cucumber Scenario Outline 处理 Excel 电子表格

    如果可能的话 我试图找到一种更优雅的方法来处理从与 Excel 电子表格行 第 n 个 相关的 Cucumber Scenario Outline 中调用第 n 个数字 目前 我正在使用迭代编号来定义要从中提取数据的 Excel 电子表格的
  • 无法在 BlackBerry Playbook 上设置音量

    我在更改黑莓游戏书的音量时遇到问题 首先 我将 Android 应用程序重新打包到 Palybook 应用程序 我需要使用搜索栏更改黑莓剧本的音量 并在搜索监听器中设置音频管理器音量 这是代码 audioManager AudioManag
  • 条件查询:按计数排序

    我正在尝试执行一个标准查询 该查询返回 stackoverflow 中回答最多的问题 例如常见问题解答 一个问题包含多个答案 我正在尝试使用标准查询返回按每个问题的答案数排序的回答最多的问题 任何人都知道我应该在 hibernate cri
  • C/C++ 通过 Android NDK 在 JNI 中看不到 Java 方法

    我正在尝试从使用 NDK 构建的 C 类文件调用 Java 方法 它不断抛出常见的 未找到非静态方法 错误并导致整个 Android 应用程序崩溃 下面的代码片段 有些东西可能不需要 但我按原样保留它们 因为焦点 问题在于refreshJN
  • 在多线程环境中,Collections.sort 方法有时会抛出 ConcurrentModificationException。列表没有进行结构性修改

    package CollectionsTS import java util ArrayList import java util Collections import java util HashSet import java util

随机推荐