Scala中的私有和受保护的构造函数

我一直对Scala没有明确的主要构造函数的影响感到好奇,只是类体的内容。

特别是,我怀疑私有或受保护的构造函数模式,即通过伴随对象或其他类或对象的方法来控制构造可能没有明显的实现。

我错了吗? 如果是这样,那怎么办?

您可以通过在类名和参数列表之间插入适当的关键字来声明默认构造函数为private / protected,如下所示:

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

Aleksander的答案是正确的,但在Scala编程提供了一个额外的select:

 sealed trait Foo { // interface } object Foo { def apply(...): Foo = // public constructor private class FooImpl(...) extends Foo { ... } // real class }