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

Alo*_*ard 9 scala

问候,

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

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

Foo.scala

package project.foo

class Foo(val value: String)

object Foo {
  def generate: Foo = new Foo("test")
}
Run Code Online (Sandbox Code Playgroud)

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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Scala 2.9

Jea*_*let 17

试试这个:

package project.foo
class Foo private[foo] (value: String)
Run Code Online (Sandbox Code Playgroud)

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

您可以在此处详细了解Scala的可见性(特别是对于作用域的私有和作用域保护).