Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改构造函数参数,然后将其传递给Scala中的超类构造函数_Scala_Inheritance - Fatal编程技术网

修改构造函数参数,然后将其传递给Scala中的超类构造函数

修改构造函数参数,然后将其传递给Scala中的超类构造函数,scala,inheritance,Scala,Inheritance,我有一个超类: class Filter(val param: ComplexFilterParams){ def this(config: String) = this(parseStrConfig(config)) 我需要创建一个子类,它获取一个字符串参数,然后以另一种方式解析它,并创建ComplexFilterParams 诸如此类: class NewFilter(str:String) extends Filter { 有办法吗 我有一个解决办法。但我觉得很难看。我创建伴生

我有一个超类:

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)) {

使用另一个
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")

使用另一个
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")

结尾处的代码看起来正常,但不太确定是否在伴随对象中使用
def this
而不是
apply
方法。结尾处的代码看起来正常,但不确定是否在伴随对象中使用
def this
而不是
apply
方法。