У меня есть класс 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 прямо упоминается возможность взаимодействия с классами дел Scala:
Если все классы в иерархии представляют собой комбинацию классов случаев и классов scala с методами, сгенерированными ломбоком, все равенства будут «просто работать».
Есть что-нибудь, что я здесь скучаю? Я могу обойти это, используя class
вместо case class
, но тогда мне придется реализовать equals
, который не выглядит таким элегантным.