以下是案例类,用于验证name
参数既不是null
也不是空:
case class MyClass(name: String) {
require(Option(name).map(!_.isEmpty) == Option(true), "name is null or empty")
}
正如预期的那样,将null
或空字符串传递给name
会产生IllegalArgumentException
。
是否可以重写验证以获取Success
或Failure
而不是抛出IllegalArgumentException
答案 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))
}
如果您愿意,您当然可以返回Validation
,Either
或Try
。