В Scala, как я могу выбрать между классом + объект-компаньон против только объекта - PullRequest
0 голосов
/ 12 июня 2018

Я не уверен, стоит ли мне выбирать класс с сопутствующим объектом в scala вместо использования только объекта.Я просто хочу использовать объект в любом случае, но только потому, что мне нужен только один экземпляр класса.С другой стороны, я читаю, что классы с сопутствующими объектами являются хорошей практикой.Итак, какая-нибудь помощь о том, когда использовать тот или иной?

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 июня 2018
  1. Если вы хотите определить одноэлементный объект, вы должны использовать ключевое слово object (оно было введено в язык специально для этой цели).
  2. Вы хотите определить одноэлементный объект.

По modus ponens следует:

  • Вы должны использовать ключевое слово object,

, поэтомунет class необходимо.


Однако, если вы используете какую-то инфраструктуру внедрения зависимостей и хотите, чтобы ваш объект-одиночка создавался в контейнере DI, и если эта среда требует, чтобы объект-одиночка былэкземпляр простого старого Java-класса с обычным конструктором, вы можете вместо этого использовать class.

При любых других обстоятельствах я не вижу причин не использовать встроенную object функцию языка.

0 голосов
/ 12 июня 2018

Один из популярных шаблонов сопутствующих объектов следующий:

class Abc {
  ...
}

object Abc {
  def apply(): Abc = new Abc()
}

Поэтому вместо записи

val abc: Abc = new Abc()

мы можем просто написать

val abc: Abc = Abc()

Но если всевам нужен только один объект, я думаю, нет ничего плохого в том, что только один объект.

Не забывайте, что объект-компаньон - лучшее место для размещения ваших implicit s.

...