我定义了以下代码(在Scala IDE / Scala工作表中使用Scala 2.10):
object WorkSheet1 {
object A {
def apply(s: String, huh: Boolean = false): A = A(s)
}
case class A (s: String)
//case class A private (s: String)
val a = A("Oh, Hai")
}
我成功收到以下输出:
a:public_domain.WorkSheet1.A = A(Oh,Hai)
但是,当我注释掉现有的case class A (s: String)
并取消注释另一个(包含“私有”)时,我收到以下编译错误:“A类中的构造函数A不能在对象WorkSheet1“。
我的理解是,一个伴侣对象可以访问它所有的伴侣类的私有部分。嘿。呃......说真的。是什么给了什么?
答案 0 :(得分:5)
除了As
之外,任何人都可以使用它object WorkSheet1 {
object A {
def apply(s: String, huh: Boolean = false): A = A(s)
}
case class A private[A](s: String)
val a = A("Oh, Hai", false)
}
我添加了false来解决对象apply和case类构造函数之间的歧义,这是公开可见的。