如何在Scala中的超类上调用`apply`?

时间:2012-06-17 18:11:42

标签: scala inheritance override superclass super

我的类继承自某个基类,并实现apply方法,其签名与基类完全相同。我想从我的班级调用base的apply方法。 当我尝试以下时:

class MyClass extends BaseClass {
  def apply(k: String, v: String) = {
    super.apply(k, v)
    ...
  }
  ...
}

我遇到value apply is not a member of BaseClass...编译错误。 我该如何从子类中调用base的apply方法?

另外,为什么可以在没有apply关键字的情况下覆盖override方法?

编辑:实际代码:

class OAuthParamsBuilder(helper: OAuthParamsHelper)
extends KeyValueHandler {

  def apply(k: String, v: String): Unit = {
    ...
  }
}

class OAuthInitSupportBuilder
extends OAuthParamsBuilder(StandardOAuthParamsHelper) {

  /*override*/ def apply(k: String, v: String): Unit = {
    super.apply(k, v)
    ...
  }
...
}
编辑:我注意到KeyValueHandler是一个特征,这可能是个问题。

trait KeyValueHandler extends ((String, String) => Unit)

1 个答案:

答案 0 :(得分:1)

您没有帮助我们帮助您,但我怀疑这是基类上apply的真正定义:

def apply(kv: (String, String)) = ???

修改

您粘贴的代码是不够的,因为问题无法与之重现:

trait OAuthParamsHelper
trait KeyValueHandler
class OAuthParamsBuilder(helper: OAuthParamsHelper) extends KeyValueHandler {
  def apply(k: String, v: String): Unit = ???
}
object StandardOAuthParamsHelper extends OAuthParamsHelper
class OAuthInitSupportBuilder extends OAuthParamsBuilder(StandardOAuthParamsHelper) {
  override def apply(k: String, v: String): Unit = {
    super.apply(k, v)
    ???
  }
}