限制Scala 2.9中的类构造函数可见性

时间:2011-05-19 07:50:26

标签: scala

问候,

如何使Foo构造函数仅对此包(单元测试+伴随对象)可见?

我不希望能够在这两个文件之外实例化Foo ......

Foo.scala

package project.foo

class Foo(val value: String)

object Foo {
  def generate: Foo = new Foo("test")
}

FooSpec.scala

package project.foo

import org.spec2.mutable._

class FooSpec extends Specification {
  "Foo" should {
    "be constructed with a string" {
      val foo = new Foo("test")
      foo.value must be "test"
    }
  }
}

我正在使用Scala 2.9

1 个答案:

答案 0 :(得分:17)

试试这个:

package project.foo
class Foo private[foo] (value: String)

然后Foo的构造函数只能从foo包中访问。

您可以阅读有关Scala可见性的更多信息(特别注意作用域的私有和作用域保护)here