Se io definisco il seguente gestore di evento genericoOverloading gestori di eventi generici a Scala
trait Handles[E <: Event] {
def handle(event: E)
}
con il tipo di evento come questo
trait Event {
}
class InventoryItemDeactivated(val id: UUID) extends Event;
class InventoryItemCreated(val id: UUID, val name: String) extends Event;
come faccio poi fare una sola classe che implementa i gestori di eventi per ogni di questi eventi? Ho provato:
class InventoryListView extends Handles[InventoryItemCreated] with Handles[InventoryItemDeactivated] {
def handle(event: InventoryItemCreated) = {
}
def handle(event: InventoryItemDeactivated) = {
}
}
ma Scala si lamenta che un tratto non può essere ereditato due volte.
Ho trovato questo answer che suggerisce una soluzione, ma richiede più classi (una per ogni gestore). È davvero questo l'unico modo o c'è qualche altro costrutto di Scala che posso usare per fare in modo che una singola classe implementa più gestori di eventi generici (cioè usando classi di casi, manifesti o qualche altro costrutto di fantasia)?