斯卡拉的“public”val构造函数参数

问题描述:

这个声明有什么问题?为什么在给定的代码中不允许使用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

他们是没有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