Частный и охраняемый конструктор в Скале

Мне было любопытно, что в Scala отсутствует явный первичный конструктор, а только содержимое тела класса.

В частности, я подозреваю, что шаблон закрытого или защищенного конструктора, то есть управляющий построением через объект-компаньон или другой класс или методы объекта, может не иметь очевидной реализации.

Я ошибся? Если так, как это сделано?

2 ответа

Решение

Вы можете объявить конструктор по умолчанию как закрытый / защищенный, вставив соответствующее ключевое слово между именем класса и списком параметров, например так:

class Foo private () { 
  /* class body goes here... */
}

Ответ Aleksander Kmetec правильный, но Программирование в Scala предлагает дополнительную альтернативу:

sealed trait Foo {
 // interface
}

object Foo {
  def apply(...): Foo = // public constructor

  private class FooImpl(...) extends Foo { ... } // real class
}
Другие вопросы по тегам