Ответ 1
Вы можете объявить конструктор по умолчанию как private/protected, вставив соответствующее ключевое слово между именем класса и списком параметров, например:
class Foo private () {
/* class body goes here... */
}
Мне было интересно узнать о том, что не имеет явного основного конструктора в Scala, просто содержимое тела класса.
В частности, я подозреваю, что частный или защищенный шаблон конструктора, то есть управление конструкцией через объект-компаньон или другие методы класса или объекта, может не иметь очевидной реализации.
Неужели я ошибаюсь? Если да, то как это делается?
Вы можете объявить конструктор по умолчанию как private/protected, вставив соответствующее ключевое слово между именем класса и списком параметров, например:
class Foo private () {
/* class body goes here... */
}
Aleksander ответ правильный, но Программирование в Scala предлагает дополнительную альтернативу:
sealed trait Foo {
// interface
}
object Foo {
def apply(...): Foo = // public constructor
private class FooImpl(...) extends Foo { ... } // real class
}