Уместно ли определять нетривиальный класс падежа Scala? - PullRequest
8 голосов
/ 08 января 2011

Сегодня я определяю класс Scala и думаю: «Мне нужен метод equals и метод hashCode; и метод copy тоже подойдет. Я превращу это в класс case«.У моего класса уже есть куча другого кода, и он ни в коем случае не тривиален.

Так хорошо, все работает и все, но когда в учебниках рассматриваются классы падежей, все примеры определяют их для использованиякак классы значений или «объекты передачи данных».Уместно ли определять нетривиальный класс дел?Является ли мыслительный процесс, описанный выше, нормальным, или мне нужно по-другому относиться к классам случаев?

Ответы [ 2 ]

10 голосов
/ 10 января 2011

A case class предоставляет методы equals, hashCode и toString, основанные на параметрах основного конструктора, которые также превращаются в val Кроме того, объект-компаньон получает методы apply и unapply, опять же на основе основных параметров конструктора.

Кроме того, case class наследуется от Serializable и Product и не должен расширяться другими классами.

Если все эти вещи подходят для вашего класса, не стесняйтесь объявлять его как `case class '.

6 голосов
/ 08 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...