У меня есть класс Java с ломбоком, сгенерированным equals
и hashCode
@EqualsAndHashCode
@AllArgsConstructor
public class MyJavaClass {
private final String foo;
}
И класс case 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 метод
canEqual
, сгенерированный Lombok, равенprotected
(документы Lombok а> упомяни и это)Черта Scala
Equals
имеетpublic
canEqual
метод.
В Lombok Docs явно упоминается взаимодействие с классами case Scala:
Если все классы в иерархии представляют собой смесь классов scala case и классов с методами equals, сгенерированными ломбоком, все равенства будут «просто работать».
Есть ли что-то, что мне здесь не хватает? Я могу обойти это, используя class
, а не case class
, но тогда мне придется реализовать equals
, что не кажется таким элегантным.