Уместно ли определить нетривиальный класс класса 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

Не стесняйтесь, если у него нет потомков. Расширение классов классов - плохая идея.