Scala案例类:如何验证构造函数参数

时间:2013-12-09 19:04:14

标签: scala

以下是案例类,用于验证name参数既不是null也不是空:

case class MyClass(name: String) {

    require(Option(name).map(!_.isEmpty) == Option(true), "name is null or empty")
}

正如预期的那样,将null或空字符串传递给name会产生IllegalArgumentException

是否可以重写验证以获取SuccessFailure而不是抛出IllegalArgumentException

1 个答案:

答案 0 :(得分:21)

您不能让构造函数返回除类类型之外的其他内容。但是,您可以在随播对象上定义一个函数来执行此操作:

case class MyClass private(name: String)

object MyClass {  
  def fromName(name: String): Option[MyClass] = {
    if(name == null || name.isEmpty)
      None
    else 
      Some(new MyClass(name))
  }

如果您愿意,您当然可以返回ValidationEitherTry