假设我想在一个方法声明中声明它只能获取一个已知不为空的字符串,并且不会因此而产生任何运行时成本。 类似的东西:
class NonEmptyString(val s: String) extends AnyVal {}
object NonEmptyString {
def apply(s: String) {
require(!s.isEmpty)
new NonEmptyString(s)
}
}
似乎可以做到这一点,但从理论上讲,它可以让某人根据需要新建另一个。
如果它不是一个值类,我可以简单地将检查放在构造函数中,但是值类不能有构造函数:
scala> class NonEmptyString(val s: String) extends AnyVal { require(!s.isEmpty) }
<console>:7: error: this statement is not allowed in value class
class NonEmptyString(val s: String) extends AnyVal { require(!s.isEmpty) }
在我目前的项目中,有几个地方这是一个有用的技术,有没有人想出一个向价值类添加不变量的好方法?