Отбрасывание исключений во время построения обычно рассматривается как не очень вежливое, но я не уверен, как этого избежать, пытаясь обеспечить ограничение ограничений на значения класса case.
Скажем, например, что мне нужно представлять диапазон, и что обе границы должны быть положительными. Непосредственная реализация:
case class Range(from: Int, to: Int)
Это, однако, не гарантирует, что оба from
и to
положительны, а to
больше, чем from
.
Мой первый инстинкт - реализовать его следующим образом:
case class Range(from: Int, to: Int) {
require(from >= 0)
require(to >= 0)
require(to >= from)
}
Это, однако, делает конструктор Range
небезопасным.
Существует ли общий шаблон, позволяющий упростить использование классов case, принудительное ограничение значений и избежать исключения исключений?