2016-08-30 3 views
2

Мне нужно проверить параметр моего класса значений (см. Ниже). Но я получаю сообщение об ошибкеОператор if в классе значений

это утверждение не имеет значение в классе

во время компиляции, есть способ обойти это? Благодарю.

case class Size(val size: Long) extends AnyVal { 
    if (size < 0) throw new IllegalArgumentException; // error 
    def +(s: Size): Size =Size(size + s.size) 
} 
+0

Я думаю, ваша проблема - это параметр 'size'. Поскольку класс value не может быть параметром другого значения другого класса значений. –

+0

http://docs.scala-lang.org/sips/completed/value-classes.html, а именно, часть «C может не иметь операторов инициализации». –

+1

Sиe: http://stackoverflow.com/questions/33136558/validations-in-value-classes – Samar

ответ

5

класс Значение является оболочкой вокруг существующего объекта, так что Scala не на самом деле значение Instantiate объекта класса, но использовать базовый объект, а не (именно поэтому SIP-15 существует в первую очередь). Следовательно, нет места для ввода кода инициализации, а проверка времени исполнения size просто невозможна.

Смежные вопросы