스칼라에서 클래스 필드에 제약 조건을 두는 방법은 무엇입니까? 패키지에 도메인의 모델이 있고 다른 패키지에 내 모델을 인스턴스화하는 DSL이 있습니다. 모델의 기본 형태는 이것이다 :스칼라 : 클래스 필드에 제약 조건 넣기
abstract class Element {
var name: String
var description: String
var types : Set[Type]
}
class SAComponent (var name :String,
var description : String,
var properties : Set[Property] = Set(),
var types : Set[Type] = Set(),
) extends Component
요소 내 모델의 루트입니다. 요소의 이름과 설명 및 유형을 상속하는 각 클래스가 이러한 제약 조건을 준수하도록 Element의 필드에 제약 조건을 적용하려고합니다. 다른 말로하면 나는이 필드에 대한 정보를 정의해야합니다. 맞습니까? 어떻게해야합니까?
나는 것을하려고했으나 제약이 존중되지 않습니다abstract class Element {
def name: String
def name_= (value: String): Unit = {if (isBadValue(value)throw new IllegalArgumentException
name = value
}
var description : String,
var types : Set[Type] = Set }
class Component (override var name : String, var description: String) extends Element
문제는 구체적인 클래스의 생성자에서 제약, 을 존중해야 일부 필드는 null 값으로 초기화해야한다는 것입니다. 따라서 "은이 필요합니다"라는 메시지는 좋은 해결책이 아닙니다. 감사합니다.
안녕하세요, 답장을 보내 주셔서 감사합니다. 그러나 당신의 솔루션은 나를 위해 작동하지 않습니다. val이 아니라 "var"이 필요합니다. 컨트롤은 처음 인스턴스를 시작할 때뿐만 아니라 값을 변경할 때마다 수행되어야합니다. 의견이 있으십니까? – user1826663