2016-09-28 9 views
0

この宣言で何が問題になっていますか?特定のコードでpublicが許可されないのはなぜですか?Scalaの "public" valコンストラクタパラメータ

class Alpha(public val a:Int,public val b:Int) 

これはカプセル化によるものですか?

+3

「public」はScalaではキーワードではないため、物事は、デフォルトでは 'public'です。 (これはJavaとは異なります!) – Jesper

+0

私はそこにいると思った。それはJavaのためです。 – optional

+0

スカラはJavaではありません。なぜなら、Javaに何かが存在しても、それがScalaにも存在するわけではないからです。私はScalaのアクセス修飾子に関するブログポストを書いています:[Scalaアクセス修飾子と修飾子の詳細](http://www.jesperdj.com/2016/01/08/scala-access-modifiers-and-qualifiers-in-detail/) – Jesper

答えて

5

Scalaのキーワードはpublicではありません。 ScalaのデフォルトのAccess修飾子はpublicです。あなたの場合、コンストラクタシグネチャからpublicを削除すると、パラメータが公開されます。

//Public 
class Alpha(val a: Int, val b: Int){} 

//Private 
class Alpha(private val a: Int, private val b: Int){} 
+0

もう少し複雑です。クラスC(x: Int) 'と'クラスC(val x:Int) 'と呼ばれます。デフォルトでは、 'val'sと' var'だけがpublicです。前者は常にプライベートフィールドを定義します。 –

+0

正確には、前者の 'クラスC(x:Int)'はプライベートフィールドを定義していません。現在のインスタンスからのみアクセス可能なコンストラクタargを定義します。 – eques