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