Частный и охраняемый конструктор в Скале
Мне было любопытно, что в 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
}