我有一个ConfigBuilder类的层次结构,这些类具有创建Config实例的作用。我的超类是 AbstractConfigBuilder ,它具有方法 build 。我希望该构建在实际构建对象之前始终调用方法 validate 。所以,在抽象超类中,我有
val commonField: String //one of many fields common to all the hierarchy
abstract def build: Config //building logic left to the subclasses
def validate: Boolean = {
// here some common checks
commonField.size > 0
}
在子类中
val subFiled: String
def build: Config = {
if(validate) // call to validation
new ConfigImplementation(commonField, subfield)
else throw new Error()
}
def validate: Boolean = {
super.validate
subField.size > 0
}
我想要实现的是避免在超类的每个子类中调用进行验证。我的行为是明确且固定的:仅在验证其参数(超类中一些常见的参数,子类中的其余参数)后,才构建配置。 您能建议我最好的方法吗?
答案 0 :(得分:1)
只需将您的build
分成两部分:
protected abstract def buildInternal: Config
def validate: Boolean
final def build: Config = if(validate) buildInternal else throw new Error()