gpt4 book ai didi

EqualsVerifier 断言错误 : Significant fields: equals does not use , 或者它是无状态的

转载 作者:行者123 更新时间:2023-12-04 06:44:22 24 4
gpt4 key购买 nike

设置,java 8 使用 lombok、meanbean 和 equalsverifier(所有 3 个的忠实粉丝,并且根据公司政策我可以使用的版本也有限制 - 在 equalsverifier 的 2.3.3 上):

@Data
@NoArgsConstructor
class A {...}

@Data
@NoArgsConstructor
class B extends class A {...}

调用 EqualsVerifier 时出现重要字段错误:

EqualsVerifier.forClass(B.class)
.withRedefinedSuperclass()
.suppress(Warning.STRICT_INHERITANCE, Warning.NONFINAL_FIELDS, Warning.INHERITED_DIRECTLY_FROM_OBJECT).verify();

如下更改类 B,并得到重新定义的父类(super class)错误:

@NoArgsConstructor
@ToString(callSuper=false)
class B extends class A {...}

再次更改类 B 如下,并得到显着字段错误:

@NoArgsConstructor
@ToString(callSuper=false)
@EqualsAndHashCode(callSuper=false)
class B extends class A {...}

有什么建议吗?我不知道如何通过这一关。

最佳答案

这里是 EqualsVerifier 的创建者。

我没有足够的信息来帮助您 -- AB 有哪些字段?另外,我不确定Lombok的@Data是否可以继承;您必须查看他们的文档或进行一些实验。

也就是说,将 equals 与继承正确结合起来很难做到正确。我通常给人们的建议是,不要这样做。如果必须,我已经在 EqualsVerifier manual 中写了一些相关内容.我还建议阅读 this article了解一些背景信息。

作为一般经验法则:

  • 如果您覆盖它们并打算添加状态,请始终在您的 equals 方法中调用 super。
  • 如果您不需要从它们扩展,请将您的类设为final。在这种情况下,B 可能是最终的,这将使您更容易安抚 EqualsVerifier。
  • 如果您不知道 Lombok 生成什么代码,请使用 Delombok .

关于EqualsVerifier 断言错误 : Significant fields: equals does not use <fieldName>, 或者它是无状态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52875514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com