it-swarm-ja.tech

Scalaのプライベートおよび保護されたコンストラクタ

Scalaに明示的なプライマリコンストラクターを持たないことの影響、クラス本体の内容だけに興味があります。

特に、プライベートまたは保護されたコンストラクタパターン、つまり、コンパニオンオブジェクトまたは別のクラスまたはオブジェクトのメソッドを介して構築を制御することは、明らかな実装を持たない可能性があると思います。

私が間違っている?もしそうなら、それはどのように行われますか?

106
Don Mackenzie

次のように、クラス名とパラメーターリストの間に適切なキーワードを挿入することにより、デフォルトコンストラクターをprivate/protectedとして宣言できます。

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

Aleksander の答えは正しいですが、 Scalaでのプログラミング は追加の代替手段を提供します:

sealed trait Foo {
 // interface
}

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

  private class FooImpl(...) extends Foo { ... } // real class
}
63