2012-03-21 2 views
12

Можно создать дубликат:
What is the rationale behind having companion objects in Scala?Scala: компаньон объекта назначения

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

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

+0

[ответ ниже] (http://stackoverflow.com/a/9806136/39396) лучше, чем принятый ответ на дубликат. –

ответ

18

объекты Companion необходимы для:

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

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

+0

Итак, в случае логического, box/unbox играть роль статического метода для Java? в Java у нас было бы определение Boolean.Box (boolean b)? – Bober02

+1

Если вы использовали стандартную библиотеку Scala из Java-программы, вы увидите метод 'box' как статический метод. – axel22

Смежные вопросы