EventBus 型パラメータ付のイベントタイプのサポート
※EventBusについての全投稿は/tag/eventBusにある。
EventBus Ver 1.1.0から、型パラメータ付のイベントタイプをサポートするようになった。
旧来のlistenの問題点
以前のlistenの問題点としては、以下のようなケースに対応できないことだった。
public static class Foo {}
public static class Bar<T> {}
...
eventBus.listen(Bar.class, e-> ....);
...
eventBus.dispatchEvent(new Bar<Foo>(new Foo()));
Barは型パラメータ付クラスであり、実際に配信されるイベントが、Bar<Foo>という型であるとしても、以下のように記述することはできない。
eventBus.listen(Bar<Foo>.class, e-> ....);
以下のように書くしかない。
eventBus.listen(Bar.class, e-> ....);
だから、リスナー「e-> …」のところで行える処理としては、(キャストをしなければ)型パラメータ無しのBarクラスの処理しかできない。
解決方法
新たな、EventTypeというクラスを導入した。これを次のように使用する。
public static class Foo {}
public static class Bar<T> {}
...
eventBus.listen(new EventType<Bar<Foo>>() {}, e-> ....);
...
eventBus.dispatchEvent(new Bar<Foo>(new Foo()));
この場合、イベントオブジェクトの型がBar
注意事項としては、EventTypeクラスは常に派生クラスを作成しなければならないことである。「new EventType<Bar
ディスカッション
コメント一覧
まだ、コメントがありません