Scalaでは、クラスのフィールドに制約を課す方法は? パッケージにはモデルのドメインがあり、別のパッケージにはモデルをインスタンス化するための 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 のフィールドに制約を設定して、Element の名前と説明、および型を継承する各クラスがこれらの制約を尊重するようにします。言い換えれば、これらのフィールドの I get を定義する必要があります。右?どうすればいいですか?
私はそれを試しましたが、制約は尊重されません:
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 値に初期化する必要があることです。したがって、私にとって「require」は良い解決策ではありません。皆さん、ありがとうございました。