Перегрузка универсальных обработчиков событий в 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 жалуется, что черта не может быть унаследована дважды.

Я нашел этот ответ , который намекает на решение, но требует нескольких классов (по одному для каждого обработчика). Действительно ли это единственный способ, или есть какая-то другая конструкция Scala, которую я могу использовать, чтобы заставить один класс реализовать несколько универсальных обработчиков событий (то есть с использованием классов case, манифестов или какой-либо другой причудливой конструкции)?.

7
задан Community 23 May 2017 в 10:26
поделиться