2016-08-30 3 views
2

내 값 클래스 (아래)의 매개 변수를 확인해야합니다. 하지만If 값 클래스의 문

이 문이 컴파일시에 값 클래스

에 허용되지 않는 오류 얻을이 주위에 방법은 무엇입니까? 감사. (SIP-15가 처음부터 존재 이유입니다)

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

문제는 '크기'매개 변수라고 생각합니다. 왜냐하면 value 클래스는 다른 value 클래스의 다른 값의 매개 변수가 될 수 없기 때문입니다. –

+0

http://docs.scala-lang.org/sips/completed/value-classes.html, 즉 "C는 초기화 문이 없을 수 있습니다." –

+1

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

답변

5

값 클래스는 기존 개체 래퍼이기 때문에 스칼라는 사실 인스턴스화 값 클래스 객체에 있지 않지만, 대신 기본 개체를 사용합니다. 따라서 초기화 코드를 넣을 장소가없고 size의 런타임 검사는 단순히 불가능합니다.