【问题标题】:Purpose of CompareObjectsWithEquals PMD ruleCompareObjectsWithEquals PMD 规则的目的
【发布时间】:2016-09-02 10:40:30
【问题描述】:

我刚刚违反了 PMD 中的 CompareObjectsWithEquals 规则,因为我使用 '==' 而不是 equals() 比较了两个对象引用,但我很难理解为什么这是一个问题并且不能找不到此限制的任何理由。

我很欣赏 Object.equals() 比较引用并因此具有相同的效果,但我没有使用原始对象,因此我不能保证该方法不会在层次结构中的某个位置被覆盖.

我想做一个参考比较,我想确保这始终是一个参考比较。为什么 PMD 会试图强迫我调用 equals()?

只是我一个人,还是这是一个非常愚蠢的规则??

已编辑: 为了清楚起见——我不是在问==equals() 之间有什么区别(根据What is the difference between == vs equals() in Java?)——我完全理解这一点。我在问为什么 PMD 会强迫我总是使用 equals() 当调用者可能合法地想要确保执行参考比较时。

【问题讨论】:

  • 如果我直接回答你的问题,我会被标记为rude/offensive :/
  • @Tunaki - 你能解释一下这是怎么重复的吗?我理解 == 和 equals() 之间的区别 - 我想我已经在我的问题中说清楚了?我的问题是关于 PMD 规则似乎试图阻止我使用 '==' 的原因,而在我看来,这样做通常是完全合法的。
  • @xenteros 如果你被我的问题冒犯了,我很抱歉。您是否可以给我一个低调的回复版本,并解释您对此有问题的原因?
  • 您永远不应该将对象与== 进行比较,而是将其与equals 进行比较,这就是警告告诉您的内容。链接问题中解释了这两种方式的区别和解释。
  • 链接问题的原因是因此您将测试对象相等性而不是功能相等性。确实,将 Objects 与 == 进行比较通常是一个错误。这很可能是 PMD 规则存在的原因 (see this question)。要禁用警告,请检查this question

标签: java pmd


【解决方案1】:

在您的情况下,您知道自己在做什么,并且需要比较参考,以确保该规则不适用。而且你必须使用==

但大多数时候,这是新 Java 开发人员的错误,他们尝试使用 == 而不是 .equals() 来比较对象的值。

【讨论】:

    【解决方案2】:

    除了@YMomb:

    PMD 和那些静态分析工具总是将最终决定权留给用户。如果您认为您的设计是正确的,您有权忽略任何规则。

    【讨论】:

    • 确实是 Arda,但是如果您正在处理一个大型项目,该项目的目标是代码满足代码分析工具的程度,并且您个人无法控制规则集然后变得更加困难(在这种情况下,我只使用了@SuppressWarnings,但我的项目不鼓励这样做)。基本上,我只是想知道这条规则的理由。这个特别的 IMO 似乎相当严厉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2011-08-09
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    相关资源
    最近更新 更多