gpt4 book ai didi

java - Lombok 继承@EqualsAndHashCode

转载 作者:行者123 更新时间:2023-11-29 03:13:09 25 4
gpt4 key购买 nike

我有一个使用@EqualsAndHashCode 扩展父类的类。我在使用 Lombok 1.16.0 和 Java 8 时遇到编译错误

@EqualsAndHashCode(doNotUseGetters = true, of = { "propertyA", "propertyB"})
公开课父级{...}

@EqualsAndHashCode(callSuper = true, doNotUseGetters = true, of = { "propertyC", "propertyD"})
公共(public)课 Child extends Parent {...}

错误是...

[错误] 无法在项目 granger 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile):编译失败[错误]/Users/sarah/src/main/java/com/xxx/Child.java:[26,1] com.xxx.Child 中的 canEqual(java.lang.Object) 无法覆盖 canEqual(java. com.yyy.Parent 中的 lang.Object)[错误] 试图分配较弱的访问权限;是公开的

关于继承和我正在滥用的@EqualsAndHashCode 和 Lombok 是否有任何最佳实践?或者有什么办法解决这个问题?

最佳答案

即使您进行了此构建,您最终也会得到一个损坏的 equals 方法,因为它不会是对称的(parent.equals(child) 如果它们有父字段中的相同值,但永远不会 child.equals(parent))。自从我使用 Lombok 以来已经有一段时间了,但是由于这个原因,scala 案例类(在这方面或多或少是等效的)不能扩展其他案例类。

请仔细考虑ParentChild 代表什么。 Child 真的可以用 Liskov 替代 Parent 吗?如果是这样,最好从 Parent 继承 equalshashCode 的定义,而不是尝试在 Child 中重新定义它们 全部;如果不是,最好将通用功能提取到 ParentChild 都扩展的通用父类(super class)中,而不是将它们作为父类和子类。

关于java - Lombok 继承@EqualsAndHashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28175013/

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