Nếu tôi xác định các sự kiện chung xử lý sauxử lý sự kiện chung chung quá tải tại Scala
trait Handles[E <: Event] {
def handle(event: E)
}
với sự kiện kiểu như thế này
trait Event {
}
class InventoryItemDeactivated(val id: UUID) extends Event;
class InventoryItemCreated(val id: UUID, val name: String) extends Event;
làm thế nào để sau đó tạo ra một lớp duy nhất mà thực hiện xử lý sự kiện cho mỗi của những sự kiện này? Tôi đã thử:
class InventoryListView extends Handles[InventoryItemCreated] with Handles[InventoryItemDeactivated] {
def handle(event: InventoryItemCreated) = {
}
def handle(event: InventoryItemDeactivated) = {
}
}
nhưng Scala than phiền rằng một đặc điểm không thể được kế thừa hai lần.
Tôi tìm thấy điều này answer gợi ý một giải pháp, nhưng nó ghép nối để yêu cầu nhiều lớp (một cho mỗi trình xử lý). Đây có phải là cách duy nhất hay là có một số cấu trúc Scala khác mà tôi có thể sử dụng để làm cho một lớp đơn lẻ triển khai nhiều trình xử lý sự kiện chung (tức là sử dụng các lớp chữ, biểu hiện hoặc một số cấu trúc ưa thích khác)?