首页 > 解决方案 > 在将构造函数参数传递给 Scala 中的超类构造函数之前修改构造函数参数

问题描述

我有一个超类:

class Filter(val param: ComplexFilterParams){
    def this(config: String) = this(parseStrConfig(config))

我需要创建一个获取字符串参数的子类,然后以另一种方式解析它并创建 ComplexFilterParams。

像这样的东西:

class NewFilter(str:String) extends Filter {

有没有办法做到这一点?

我有一个解决方案。但我认为它很丑。我创建伴随对象,在那里定义一个转换方法,然后执行以下操作:

class NewFilter(str:String) extends Filter(NewFilter.convert(str)) {

标签: scalainheritance

解决方案


您可以使用apply伴随对象中的另一个实现更轻松,例如:

class NewFilter(val param: ComplexFilterParams) extends Filter(param){
//other implementations
}


object NewFilter {
  def apply(str: String) = new NewFilter(convert(str))

  def convert(str: String): ComplexFilterParams = ...
}

val filter = NewFilter("config string")

推荐阅读