【问题标题】:Disable checkstyle for hashCode and equals禁用 hashCode 和 equals 的检查样式
【发布时间】:2012-02-01 09:38:30
【问题描述】:

我需要示例配置来完全禁用 hashCode()equals() 方法的检查样式。

【问题讨论】:

  • @shaman matthews 解决方案有什么问题?
  • 问题是 checkstyle 倾向于在 augogenerated equals() 和 hashcode() 方法的代码中执行检查,这通常违反我们的编码约定
  • 我们遇到了同样的问题。例如,由于结果表达式中有大量&& 运算符,圈复杂度检查经常标记equals() 方法。

标签: java coding-style checkstyle


【解决方案1】:

这可能不是您问题的直接答案,但 Lombok 确实非常擅长避免这种样板代码:http://projectlombok.org

对于这种情况,您可以使用以下方法注释您的类:

@EqualsAndHashCode(of="id")

@EqualsAndHashCode(excludes={"these","fields","wont","be","compared"})

不过,还没有针对 checkstyle 对其进行测试...

【讨论】:

    【解决方案2】:

    日食中的检查样式。打开 Windows -> 首选项 -> Checkstyle。

    如果您使用默认配置,请复制到其他名称,选择复制的名称并单击配置。搜索 equals 并在编码问题下选择“Equals and Hashcode”。取消选中所有您不需要的已启用。

    点击确定并设置为默认值。

    【讨论】:

    • 我确信 hudson 会根据一组特定的规则运行 checkstyle。只需将这些规则替换为您使用上述方法生成的规则即可。
    【解决方案3】:

    请参阅Checkstyle 5.5: Coding Config 中的 EqualsHashCode。只需删除

    <module name="EqualsHashCode"/>
    

    从您的 checkstyle 配置文件中,或通过 Eclipse 插件进行。但我会问自己为什么要这样做。 equals() 和 hashCode() 的错误实现是常见的错误来源,因此在执行此操作之前要非常小心。

    【讨论】:

    • 我正在使用 eclipe 来生成它。我知道我需要从 checkstyle xml 中禁用它 - 问题是如何。我想禁用对这些方法的所有检查。
    • @Matthew Farwell:我认为过度依赖 hashCode()equals 是一种更严重的疾病。引用 Joshua Bloch 的 Effective Java 中的一句话来诉诸权威:“根本没有办法扩展一个可实例化的类并添加一个方面,同时保留等价契约”。这是一个众所周知、有据可查且非常真实的问题。有人可能会争辩说,抛出异常的默认 hashCode/equals 比尝试实现“正确”的 equals/hashCode 更明智。 Martin Odersky 关于这个主题:artima.com/lejava/articles/equality.html
    • @Matthew Farwell:现在我当然确实使用 hashCodeequals 以及所有取决于这些的优秀集合...但我想指出,面对继承,这确实是多么困难:Artima 文章中的 canEqual 方法解释(以及它施加的限制)让我大开眼界:) 绝对不是 checkstyle 验证的东西; )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多