gpt4 book ai didi

java - Lombok @EqualsAndHashCode 与 Scala - 案例类不能继承 Java 类

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:27 24 4
gpt4 key购买 nike

我有一个Java类,带有lombok生成的equalshashCode

@EqualsAndHashCode
@AllArgsConstructor
public class MyJavaClass {
private final String foo;
}

还有一个继承此的 Scala 案例类:

case class MyScalaCaseClass(foo: String, bar: String) extends MyJavaClass(foo)

我收到以下编译时错误:

[scalac-2.12] .../MyScalaCaseClass.scala:5: error: overriding method canEqual in trait Equals of type (that: Any)Boolean;
[scalac-2.12] method canEqual in class MyJavaClass of type (x$1: Any)Boolean has weaker access privileges; it should be public
[scalac-2.12] case class MyScalaCaseClass(foo: String, bar: String) extends MyJavaClass(foo)
[scalac-2.12] ^
[scalac-2.12] one error found

看来这个问题是由访问权限不匹配引起的:

  • 我使用的是 Lombok 1.16,从 1.14 开始,Lombok 生成的 canEqual 方法似乎受到 protected(the Lombok docs 也提到了这一点)

  • Scala Equals trait有一个 public canEqual 方法。

Lombok Docs明确提及与 Scala 案例类的互操作性:

If all classes in a hierarchy are a mix of scala case classes and classes with lombok-generated equals methods, all equality will 'just work'.

我这里有什么遗漏的吗?我可以通过使用 class 而不是 case class 来解决这个问题,但随后我必须实现 equals ,这看起来不太优雅。

最佳答案

也许您可以重写MyJavaClass中的canEqual方法来替换lombok生成的canEqual方法,例如:

public boolean canEqual(Object other) {
return other instanceof MyJavaClass;
}

这种方式将保持 canEqual 方法具有 public 修饰符。

关于java - Lombok @EqualsAndHashCode 与 Scala - 案例类不能继承 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56051261/

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