我想在scala中实现一个简单的事件总线。建筑块是:
// an event type
trait Event
// an event handler
trait EventHandler[-T <: Event] {
def handle(event: T)
}
// a map to register the event handlers
val eventRegistry =
new Map[Class[_], EventHandler[_]]()
我有一个注册我的事件处理程序的功能:
def registerEventHandler[T: ClassTag](handler: EventHandler[T]) = {
val key = implicitly[ClassTag[T]].runtimeClass
eventHandlers.put(key, handler)
}
我需要一个处理事件的函数。该函数可以接收AnyRef并需要从地图中获取事件处理程序(如果存在)并处理该事件。
def handle(msg:AnyRef) {
// cast msg to an event. msg myght be or not an Event
// obtain the correct event handle from the eventRegistry
handler.handle(e)
}
有没有办法在scala中执行此操作?
谢谢!