У вас нет возможности изменить способ, которым конструктор по умолчанию хранит свои параметры (например, путем изменения параметров до того, как они будут сохранены как val
s), но у вас есть возможность вызвать исключение, если параметры неверны (это произойдет после сохранения параметров)
case class Foo(x:Int){
if (x<0) throw SomeException;
}
У вас также есть возможность реализовать дополнительные конструкторы, которые вызывают первый конструктор
case class Foo(x:Int){
def this(x:Int,y:Int) = this(x+y)
}
но те не получают заводские методы.
Вы можете легко создать метод фабрики самостоятельно, добавив его в объект-компаньон
object Foo{
def apply(x:Int,y:Int) = new Foo(x,y)
}
Что-нибудь еще более сложное, чем это, и вы должны отказаться от класса case и реализовать его части самостоятельно: apply
, unapply
, equals
и hashCode
. Программирование в Scala говорит о том, как сделать все это, давая хорошие формулы для equals
и hashCode
.