Lombok 继承@EqualsAndHashCode
Lombok inheritance with @EqualsAndHashCode
我有一个 class,它使用 @EqualsAndHashCode 扩展父 class。我在使用 Lombok 1.16.0 和 Java 8
时遇到编译错误
@EqualsAndHashCode(doNotUseGetters = true, of = { "propertyA", "propertyB" })
public class Parent {...}
@EqualsAndHashCode(callSuper = true, doNotUseGetters = true, of = { "propertyC", "propertyD" })
public class Child extends Parent {...}
错误是...
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project granger: Compilation failure
[ERROR] /Users/sarah/src/main/java/com/xxx/Child.java:[26,1] canEqual(java.lang.Object) in com.xxx.Child cannot override canEqual(java.lang.Object) in com.yyy.Parent
[ERROR] attempting to assign weaker access privileges; was public
关于继承和我滥用的@EqualsAndHashCode 和 Lombok 是否有任何最佳实践?或者有什么办法解决这个问题?
即使您进行了此构建,您最终也会得到一个损坏的 equals
方法,因为它不会是对称的(parent.equals(child)
如果它们在父字段中具有相同的值,但是从不 child.equals(parent)
)。自从我使用 Lombok 以来已经有一段时间了,但是 scala case 类(在这方面或多或少是等效的)不能扩展其他 case 类 因为这个原因。
仔细想想 Parent
和 Child
代表什么。 Child
真的可以用 Liskov 替代 Parent
吗?如果是这样,最好从 Parent
继承 equals
和 hashCode
的定义,并且根本不要尝试在 Child
中重新定义它们;如果不是,最好将公共功能提取到一个公共超类中,Parent
和 Child
都扩展,而不是将它们作为父类和子类。
类 似乎在不同的工件中,或者您进行了增量构建。
1.14 之前 canEqual
是 public
,之后是 protected
。
如果您使用 Lombok 1.16 创建 clean
和/或编译 Parent
,它应该可以工作。
我有一个 class,它使用 @EqualsAndHashCode 扩展父 class。我在使用 Lombok 1.16.0 和 Java 8
时遇到编译错误@EqualsAndHashCode(doNotUseGetters = true, of = { "propertyA", "propertyB" })
public class Parent {...}
@EqualsAndHashCode(callSuper = true, doNotUseGetters = true, of = { "propertyC", "propertyD" })
public class Child extends Parent {...}
错误是...
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project granger: Compilation failure
[ERROR] /Users/sarah/src/main/java/com/xxx/Child.java:[26,1] canEqual(java.lang.Object) in com.xxx.Child cannot override canEqual(java.lang.Object) in com.yyy.Parent
[ERROR] attempting to assign weaker access privileges; was public
关于继承和我滥用的@EqualsAndHashCode 和 Lombok 是否有任何最佳实践?或者有什么办法解决这个问题?
即使您进行了此构建,您最终也会得到一个损坏的 equals
方法,因为它不会是对称的(parent.equals(child)
如果它们在父字段中具有相同的值,但是从不 child.equals(parent)
)。自从我使用 Lombok 以来已经有一段时间了,但是 scala case 类(在这方面或多或少是等效的)不能扩展其他 case 类 因为这个原因。
仔细想想 Parent
和 Child
代表什么。 Child
真的可以用 Liskov 替代 Parent
吗?如果是这样,最好从 Parent
继承 equals
和 hashCode
的定义,并且根本不要尝试在 Child
中重新定义它们;如果不是,最好将公共功能提取到一个公共超类中,Parent
和 Child
都扩展,而不是将它们作为父类和子类。
类 似乎在不同的工件中,或者您进行了增量构建。
1.14 之前 canEqual
是 public
,之后是 protected
。
如果您使用 Lombok 1.16 创建 clean
和/或编译 Parent
,它应该可以工作。