我有一个Java类,其中生成了由equals
和hashCode
组成的龙目岛
@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
方法是protected
(the Lombok docs也提到了这一点)
Scala Equals
trait具有public
canEqual
方法。
Lombok Docs明确提到了与Scala案例类的互操作性:
如果层次结构中的所有类都是scala case类和具有lombok生成的equals方法的类的混合,则所有等式都将“正常工作”。
这里有什么我想念的吗?我可以通过使用class
而不是case class
来解决此问题,但是我必须实现似乎不太优雅的equals
。
答案 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
修饰符。