0

私のクラスはいくつかの基本クラスから継承しapply、基本の署名とまったく同じ署名を持つメソッドを実装しています。applyクラスからbase のメソッドを呼び出したい。私がフォローしようとすると:

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

1 に答える 1

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)
    ???
  }
}
于 2012-06-17T18:31:41.150 に答える