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
}
Wird geworfen:
error: type mismatch;
found : (A) => Unit
required: (this.Event) => Unit
eventListeners.getOrElseUpdate(mf.erasure.asInstanceOf[Class[Event]], ArrayBuffer[Event => Unit]()) += f
Warum heißt es, dass gefunden wurde (A) => Unit
? Der Wert von f
ist eine Funktion, die (Event) => Unit
. Ist nicht A
nur ein Typparameter, nicht die Signatur?
Beispielanruf: addEventListener { e:FooEvent => .... }