私はEventBus
ScalaプロジェクトでGuavaを使用しています。
私は次のようなパラメータ化されたイベントを持っています:
class MyEvent[T]
そして、単純なイベントリスナー:
class MyEventListener {
@Subscribe
def onStringEvent(event: MyEvent[String]) {
println("String event caught")
}
@Subscribe
def onIntEvent(event: MyEvent[Int]) {
println("Int event caught")
}
}
イベントを作成com.google.common.eventbus.EventBus
、登録MyEventListener
、および起動できます。
val eventBus = new EventBus
eventBus.register(new MyEventListener)
eventBus.post(new MyEvent[String])
しかし、すでにお察しのとおり、結果として両方onStringEvent
ともonIntEvent
呼び出されます。問題は、Java / Scalaの型消去が実行時にパラメーター型を削除し、両方のサブスクリプションがGuavaにとして表示されることevent: MyEvent
です。
わかりました、私の質問:
消去のため、この方法で異なるタイプのGuavaイベントに同じEventオブジェクトを使用することは、Javaでは不可能であり、Scalaでは不可能です。ただし、Scalaには、Javaの消去の問題を回避するための優れた方法がいくつかあることが証明されています。誰かがこれを達成するための別の方法を見ていますか?おそらくScalaの魔法を使っていますか?