这是一种类型不匹配?

rye*_*guy 3 types scala

  val eventListeners = new HashMap[Class[Event], ArrayBuffer[Event => Unit]]

  def addEventListener[A <: Event](f: A => Unit)(implicit mf: ClassManifest[A]): A => Unit = {
    eventListeners.getOrElseUpdate(mf.erasure.asInstanceOf[Class[Event]], ArrayBuffer[Event => Unit]()) += f
    f
  }
Run Code Online (Sandbox Code Playgroud)

投掷:

error: type mismatch;
 found   : (A) => Unit
 required: (this.Event) => Unit
    eventListeners.getOrElseUpdate(mf.erasure.asInstanceOf[Class[Event]], ArrayBuffer[Event => Unit]()) += f
Run Code Online (Sandbox Code Playgroud)

为什么说它找到了(A) => Unit?值f是一个函数(Event) => Unit.不A只是一个类型参数,而不是签名?

示例电话: addEventListener { e:FooEvent => .... }

Dan*_*ral 7

该类Function1在其参数上具有反变量.即,它的类型是Function1[-T, +R].

这意味着函数Any => Unit是子类型Event => Unit,但对于A子类型Event,A => Unit是_super_type Event => Unit.

因此,问题.如果您将类型参数更改为A >: Event,它应该工作.