объекты Companion необходимы для:
- методов DECLARE, связанных с классом компаньона, который бы в противном случае быть статическим (в отличие от Java, вы не можете объявить статический метод внутри самого класса в Scala)
- объявляют в
unapply
и unapplySeq
методы определения пользовательских экстракторы для сопоставления с образцом (см here)
- объявить метод
apply
, который обычно используется в качестве фабричного метода, который создает объекты определенного класса (но не должны быть)
- объекты компаньонов могут получить доступ к закрытым полям и методы их компаньон черт/класса - полезны для создания статических операций на этот конкретный черте/классе
- они имеют важные значение для implicit resolution - при поиске неявного значения определенного типа , объект-компаньон этого типа проверяется, чтобы определить, существует ли соответствующее определение
implicit
; увидеть точные правила неявного разрешения в Scala specification или краткое резюме в this blog post
Boolean
объекта в стандартной библиотеке Scala предоставляет методы box
unbox
и используемые для преобразования между примитивным Булевыми и их обернутыми, объектными представлениями. Он дополнительно (в настоящее время) используется в качестве аргумента для аннотации @specialized
, чтобы обозначить, на каких примитивных типах должен быть специализирован класс.
[ответ ниже] (http://stackoverflow.com/a/9806136/39396) лучше, чем принятый ответ на дубликат. –