【问题标题】:Restrict class constructor visibility in Scala 2.9在 Scala 2.9 中限制类构造函数的可见性
【发布时间】:2011-08-28 16:01:40
【问题描述】:

您好,

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

我不想在这 2 个文件之外实例化 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

【问题讨论】:

  • 顺便说一下,从构造函数调用返回的值永远不会是null。如果您的字符串构造函数丢失,它将无法编译。如果由于某种原因(满堆等)无法创建对象,则会抛出异常。
  • @Jean-Philippe Pellet:当然!我知道,只是为了举例:)
  • 好的,只是确保其他人(可能不知道)不会误解您的代码。
  • @Jean-Philippe Pellet> 看到,我已经编辑了问题以避免混淆

标签: scala


【解决方案1】:

试试这个:

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

那么Foo的构造函数只能从foo包中访问。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    相关资源
    最近更新 更多