Частный и охраняемый конструктор в Скале - PullRequest
106 голосов
/ 13 ноября 2009

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

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

Я не прав? Если да, то как это сделать?

Ответы [ 2 ]

183 голосов
/ 13 ноября 2009

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

class Foo private () { 
  /* class body goes here... */
}
63 голосов
/ 13 ноября 2009

Александр ответ правильный, но Программирование в Scala предлагает дополнительную альтернативу:

sealed trait Foo {
 // interface
}

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

  private class FooImpl(...) extends Foo { ... } // real class
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...