我一直很好奇Scala中没有明确的主要构造函数的影响,只是类主体的内容。
特别是,我怀疑私有或受保护的构造函数模式,即通过伴随对象或另一个类或对象的方法控制构造可能没有明显的实现。
我错了吗?如果是这样,它是如何完成的?
答案 0 :(得分:183)
您可以通过在类名和参数列表之间插入适当的关键字将默认构造函数声明为private / protected,如下所示:
class Foo private () {
/* class body goes here... */
}
答案 1 :(得分:63)
Aleksander的答案是正确的,但Programming in Scala提供了另一种选择:
sealed trait Foo {
// interface
}
object Foo {
def apply(...): Foo = // public constructor
private class FooImpl(...) extends Foo { ... } // real class
}