Уместно ли определить нетривиальный класс класса 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
Не стесняйтесь, если у него нет потомков. Расширение классов классов - плохая идея.