2017-06-07 9 views
-2

私はスカラ:ケースクラスの実装時に重要プライベート

case class private A() 

new A()#This will be a invalid call as A is private 

のようなものを使用していることしかし、私はコーディングしながら、実装の観点などから、どのような利点これは提供しないことを理解していないかを理解しますか? A()を2回呼び出すと、クラスのインスタンスは2つになります。この構文がJavaのようなインスタンス化を防止するために使用されない場合、なぜ誰かが新しいクラスをインスタンス化できるようにしたくないのですか?

+0

'case class private A()'は無効です。あなたは 'プライベートケースクラスA()'を意味しますか? –

+1

または 'case class A private()'? – Dima

答えて

0

ケースクラスのコンストラクタをプライベートにすることは役に立たない。ご存知のとおり、caseクラスは、実装が実際のコンストラクタの呼び出しであるapplyメソッドを持つ合成コンパニオンオブジェクトを取得します。

Scalaのケースクラスは、単に "クラス+ケース修飾子"に設計されています。つまり、クラスで動作するすべてのものはケースクラスでも動作します。また、コンストラクタでアクセス修飾子を指定する(無意味な)機能も含まれます。

+0

あまり役に立たないと同意します。 Scalaのケースクラスでは、コンパニオンオブジェクトのapplyメソッドよりもいくつかのことがあります。 (例えば、「適用しない」)。 有用なシナリオがある場合は、直接インスタンス化を防ぎたいが、依然としてパターンマッチングが必要な場合があります。 これは決して必要ではないと言うのは少し気になりませんが、私は例を考えることはできません。 – sfosdal

関連する問題