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