2016-09-28 87 views
0

這個聲明有什麼問題?爲什麼在給定的代碼中不允許使用public斯卡拉的「public」val構造函數參數

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

這似乎是一個愚蠢的問題,但這是由於封裝?

+3

因爲public在Scala中根本不是關鍵字。事情默認爲「公共」。 (這與Java不同!)。 – Jesper

+0

我以爲它在那裏。因爲它在Java中。我希望它會在那裏。謝謝 – optional

+0

Scala不是Java,只是因爲Java中存在的東西並不意味着它也存在於Scala中。我寫了一篇關於Scala訪問修飾符的博文:[scala訪問修飾符和修飾符的詳細內容](http://www.jesperdj.com/2016/01/08/scala-access-modifiers-and-qualifiers-in-detail/) – Jesper

回答

5

他們是沒有public關鍵字在斯卡拉。 Scala中的默認訪問修飾符是公共的。在你的情況下,如果你從你的構造函數簽名中刪除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's是默認公開的。前者總是定義一個私人領域。 –

+0

準確地說,前面的'class C(x:Int)'沒有定義專用字段;它定義了一個構造函數arg,它只能被當前實例訪問。 – eques