带Scala的Lombok @EqualsAndHashCode-案例类无法继承Java类

时间:2019-05-09 02:11:15

标签: java scala inheritance lombok

我有一个Java类,其中生成了由equalshashCode组成的龙目岛

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

还有一个继承于此的Scala case类:

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方法是protectedthe Lombok docs也提到了这一点)

  • Scala Equals trait具有public canEqual方法。

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

  

如果层次结构中的所有类都是scala case类和具有lombok生成的equals方法的类的混合,则所有等式都将“正常工作”。

这里有什么我想念的吗?我可以通过使用class而不是case class来解决此问题,但是我必须实现似乎不太优雅的equals

1 个答案:

答案 0 :(得分:0)

也许您可以覆盖axios.get("http://localhost:8080/api/getData") .then(function (response) { this.items= response.data; }).catch(function (error) { console.log(error) }); 中的canEqual方法来替换 lombok 生成的MyJavaClass方法,例如:

canEqual

这种方式将使public boolean canEqual(Object other) { return other instanceof MyJavaClass; } 方法具有canEqual修饰符。