Перегрузка универсальных обработчиков событий в Scala
Если я определю следующий общий обработчик событий
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, которую я могу использовать, чтобы заставить один класс реализовывать несколько универсальных обработчиков событий (т. Е. Используя case-классы, манифесты или некоторые другие причудливые конструкции)?