Уместно ли определить нетривиальный класс класса Scala?
Я определяю класс Scala сегодня, и я думаю: "Мне нужен метод equals
и метод hashCode
, и метод copy
был бы удобен. Я превращу это в класс случая". У моего класса уже есть куча другого кода, и он никоим образом не является тривиальным.
Так хорошо, все работает и все, но когда текстовые книги занимаются классами case, все примеры определяют их для использования в качестве классов значений или "объектов передачи данных". Уместно ли определить нетривиальный класс case? Описан ли описанный выше процесс ОК, или мне нужно думать о классах case по-разному?
Ответы
Ответ 1
A case class
предоставляет методы equals
, hashCode
и toString
, основанные на основных параметрах конструктора, все из которых также превращаются в val
. Кроме того, объект-компаньон получает методы apply
и unapply
, снова основанные на основных параметрах конструктора.
Кроме того, a case class
наследует от Serializable
и от Product
и не должен быть расширен другими классами.
Если все эти вещи подходят для вашего класса, тогда не стесняйтесь объявлять его как "класс case".
Ответ 2
Не стесняйтесь, если у него нет потомков. Расширение классов классов - плохая идея.