Scala:在类层次结构中强制执行方法调用

时间:2018-07-30 22:31:04

标签: scala inheritance

我有一个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
}

我想要实现的是避免在超类的每个子类中调用进行验证。我的行为是明确且固定的:仅在验证其参数(超类中一些常见的参数,子类中的其余参数)后,才构建配置。 您能建议我最好的方法吗?

1 个答案:

答案 0 :(得分:1)

只需将您的build分成两部分:

protected abstract def buildInternal: Config 
def validate: Boolean

final def build: Config = if(validate) buildInternal else throw new Error()