如果我定义以下通用事件处理程序
trait Handles[E <: Event] {
def handle(event: E)
}
事件类型是这样的
trait Event {
}
class InventoryItemDeactivated(val id: UUID) extends Event;
class InventoryItemCreated(val id: UUID, val name: String) extends Event;
然后我如何创建一个为这些事件中的每一个实现事件处理程序的类?我试过:
class InventoryListView extends Handles[InventoryItemCreated] with Handles[InventoryItemDeactivated] {
def handle(event: InventoryItemCreated) = {
}
def handle(event: InventoryItemDeactivated) = {
}
}
但是 Scala 抱怨一个 trait 不能被继承两次。
我发现这个答案暗示了一个解决方案,但它似乎需要多个类(每个处理程序一个)。这真的是唯一的方法,还是有一些其他的 Scala 构造我可以用来使单个类实现多个通用事件处理程序(即使用案例类、清单或其他一些奇特的构造)?