次の汎用イベント ハンドラーを定義すると、
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 は、トレイトを 2 回継承することはできないと文句を言っています。
解決策を示唆するこの回答を見つけましたが、複数のクラス (ハンドラーごとに 1 つ) が必要なようです。これが本当に唯一の方法ですか、それとも単一のクラスに複数の汎用イベント ハンドラーを実装するために使用できる他の Scala コンストラクトがあるのでしょうか (つまり、ケース クラス、マニフェスト、またはその他の派手なコンストラクトを使用します)。