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
}
抛出:这是一个类型不匹配?
error: type mismatch;
found : (A) => Unit
required: (this.Event) => Unit
eventListeners.getOrElseUpdate(mf.erasure.asInstanceOf[Class[Event]], ArrayBuffer[Event => Unit]()) += f
为什么说它发现(A) => Unit
? f
的值是一个函数(Event) => Unit
。不是A
只是一个类型参数,不是签名?
调用示例: addEventListener { e:FooEvent => .... }
不是'A <:Event'使得它''A' *确实*包含所有'Event's? – ryeguy 2011-04-08 20:53:35
@ryeguy'A <:Event'意味着'A'是'Event'的专业化/子类型。 – ziggystar 2011-04-08 21:33:01
@ziggystar:对,如果'A'是'Event'的子类型,那么为什么'A => Unit'与'Event => Unit'不一样? – ryeguy 2011-04-08 21:35:38