この宣言で何が問題になっていますか?特定のコードでpublic
が許可されないのはなぜですか?Scalaの "public" valコンストラクタパラメータ
class Alpha(public val a:Int,public val b:Int)
これはカプセル化によるものですか?
この宣言で何が問題になっていますか?特定のコードでpublic
が許可されないのはなぜですか?Scalaの "public" valコンストラクタパラメータ
class Alpha(public val a:Int,public val b:Int)
これはカプセル化によるものですか?
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){}
もう少し複雑です。クラスC(x: Int) 'と'クラスC(val x:Int) 'と呼ばれます。デフォルトでは、 'val'sと' var'だけがpublicです。前者は常にプライベートフィールドを定義します。 –
正確には、前者の 'クラスC(x:Int)'はプライベートフィールドを定義していません。現在のインスタンスからのみアクセス可能なコンストラクタargを定義します。 – eques
「public」はScalaではキーワードではないため、物事は、デフォルトでは 'public'です。 (これはJavaとは異なります!) – Jesper
私はそこにいると思った。それはJavaのためです。 – optional
スカラはJavaではありません。なぜなら、Javaに何かが存在しても、それがScalaにも存在するわけではないからです。私はScalaのアクセス修飾子に関するブログポストを書いています:[Scalaアクセス修飾子と修飾子の詳細](http://www.jesperdj.com/2016/01/08/scala-access-modifiers-and-qualifiers-in-detail/) – Jesper