Scala中的简单事件处理程序

时间:2016-06-02 07:58:33

标签: scala

我想在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中执行此操作?

谢谢!

0 个答案:

没有答案