首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EqualsVerifier断言错误:重要字段:等于不使用<fieldName>,或者它是无状态的

EqualsVerifier断言错误:重要字段:等于不使用<fieldName>,或者它是无状态的
EN

Stack Overflow用户
提问于 2018-10-18 13:46:30
回答 1查看 3K关注 0票数 3

该设置,java 8使用lombok,meanbean和均衡器(所有3的超级粉丝,也限制在我可以使用的版本每co。政策-关于平等验证者2.3.3的政策):

代码语言:javascript
复制
@Data
@NoArgsConstructor
class A {...}

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

我得到了调用EqualsVerifier的重要字段错误:

代码语言:javascript
复制
EqualsVerifier.forClass(B.class)
                .withRedefinedSuperclass()
                .suppress(Warning.STRICT_INHERITANCE, Warning.NONFINAL_FIELDS, Warning.INHERITED_DIRECTLY_FROM_OBJECT).verify();

按以下方式更改了B类,得到了重新定义的超类错误:

代码语言:javascript
复制
@NoArgsConstructor
@ToString(callSuper=false)
class B extends class A {...}

再次按以下方式更改了B类,并得到了重要字段错误:

代码语言:javascript
复制
@NoArgsConstructor
@ToString(callSuper=false)
@EqualsAndHashCode(callSuper=false)
class B extends class A {...}

有什么建议吗?我不知道怎么通过这个。

EN

回答 1

Stack Overflow用户

发布于 2018-10-21 14:39:24

这里是EqualsVerifier的创造者。

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

也就是说,正确地将equals与继承结合起来是很难做到的。我通常给人们的建议是,不要这样做。如果有必要的话,我已经在EqualsVerifier手册上写了一些关于它的文章。我还建议阅读这篇文章获得一些背景信息。

作为一般的经验法则:

  • 如果重写equals方法并打算添加状态,请始终在它们中调用超级。
  • 如果不需要对类进行扩展,则将类设置为final。在这种情况下,B可能是最终的,这将使您更容易安抚EqualsVerifier。
  • 如果您不知道Lombok生成什么代码,请使用德隆布克
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52875514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档