在Scala中,如何从其伴随对象访问案例类的私有构造函数

时间:2013-10-04 21:13:07

标签: scala constructor private-methods companion-object

我定义了以下代码(在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“。

中访问

我的理解是,一个伴侣对象可以访问它所有的伴侣类的私有部分。嘿。呃......说真的。是什么给了什么?

1 个答案:

答案 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类构造函数之间的歧义,这是公开可见的。