Scala класс case: как проверить параметры конструктора

Ниже приведен класс case, который проверяет параметр 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

Ответ 1

Вы не можете иметь конструктор, возвращающий что-то еще, чем тип класса. Вы можете, однако, определить функцию на объекте-компаньоне, чтобы сделать именно это:

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, если хотите.