使用lombok,meanbean和equalsverifier的Java 8设置(所有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更改如下,并重新定义了超类错误:
@NoArgsConstructor
@ToString(callSuper=false)
class B extends class A {...}
再次更改类B,如下所示,但出现重要字段错误:
@NoArgsConstructor
@ToString(callSuper=false)
@EqualsAndHashCode(callSuper=false)
class B extends class A {...}
有什么建议吗?我不知道该如何通过。
答案 0 :(得分:1)
此处是EqualsVerifier的创建者。
我没有足够的信息来帮助您-A
和B
有哪些领域?另外,我不确定Lombok的@Data
是否可以继承;您必须检查他们的文档或进行一些实验。
也就是说,将equals
与继承正确结合起来很难。我通常给别人的建议是,不要这样做。如果需要,我已经在EqualsVerifier manual中写了一些有关它的内容。我还建议您阅读this article以获得一些背景信息。
一般经验法则:
equals
方法并打算添加状态,则总是在它们中调用super。final
。在这种情况下,B
可能是最终的,这将使您更容易安抚EqualsVerifier。