Scala: цель сопутствующего объекта

Возможный дубликат:
В чем обоснование наличия сопутствующих объектов в Scala?

Спасибо за все ответы на мой предыдущий пост (Scala: сопутствующие объекты и "новое" ключевое слово). Я хотел бы спросить вас, какова общая цель объекта-компаньона в Scala? Во-первых, не могли бы мы включить все методы, такие как apply, в формы определения contructor/method в самом классе? Кроме того, какова точка вспомогательного булева объекта, поскольку она даже не определяет метод apply?

Еще раз спасибо за все ваши ответы.

Ответы

Ответ 1

Сопутствующие объекты необходимы для:

  • объявить методы, относящиеся к классу сопутствующих, которые в противном случае были бы статическими (в отличие от Java, вы не можете объявить статический метод внутри самого класса в Scala)
  • объявить методы unapply и unapplySeq для определения пользовательских экстракторов для сопоставления шаблонов (см. здесь)
  • объявить метод apply, который обычно используется как метод factory, который создает объекты определенного класса (но не обязательно)
  • объекты-компаньоны могут обращаться к закрытым полям и методам их сопутствующего признака/класса - полезно для создания статических операций над этим конкретным признаком/классом
  • они важны для неявного разрешения - при поиске неявного значения определенного типа объект-компаньон этого типа проверяется чтобы увидеть, существует ли соответствующее определение implicit; см. точные правила неявного разрешения в Scala спецификации или краткое резюме в это сообщение в блоге

Объект Boolean в стандартной библиотеке Scala предоставляет методы box и unbox, используемые для преобразования между примитивными булевыми элементами и их обернутыми представлениями объектов. Он дополнительно (в настоящее время) используется в качестве аргумента для аннотации @specialized, чтобы обозначить, на каких примитивных типах должен быть специализирован класс.