例子:
抛出的事件的int,但是我们的接收器接受的是Number,是int的父类
guava的EventBus是如何做到也能接受的呢:
在post方法的第一行:
Set<Class<?>> dispatchTypes = flattenHierarchy(event.getClass());
比如这里是int,得到的就是int的所有父类:
[class java.lang.Integer, class java.lang.Number, interface java.lang.Comparable, interface java.io.Serializable, class java.lang.Object]
会去查看所有的父类有没有注册接收器,这个做法我是认为有点性能损耗的,但是从功能上看是很好的,而且也是符合人的理解的。
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
import org.junit.Before;
import org.junit.Test;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
public class EventBusTest {
EventBus eventBus;
NumberTest numberTest = new NumberTest();
@Before
public void before() {
eventBus = new EventBus();
eventBus.register(numberTest);
}
@Test
public void test() {
int a = 3;
eventBus.post(a);
assertThat(numberTest.a, equalTo(3));
}
}
class NumberTest {
int a;
@Subscribe
public void onEvent(Number a) {
this.a = (int) a;
}
}
分享到:
相关推荐
jar包,亲测可用
主要介绍了EventBus与Spring Event区别,需要的朋友可以参考下
EventBus 是一个基于事件的一个发布/订阅框架,通过解耦发布者和订阅者简化事件传递,这里的事件可以理解为消息,本文中统一称为事件也就是 Event。通过EventBus可以简化生产者/消费者 这种模型,同时又可以通过...
eventBus android 跨页面异步传输数据 可用于异步网络请求和 异步跨页面传数据
jar包,亲测可用
SNAPSHOTMaven依赖<dependency><groupId>com.woter.fact</groupId><artifactId>fact-bus</artifactId><version>1.0.0-SNAPSHOT</version></dependency>功能描述fact-bus 是基于guava整合spring实现EventBus;...
汪文君Google Guava 代码。Guava之函数式接口、Guava EventBus源码剖析以及优缺点总结
├─Google Guava 第19讲-Guava之EventBus和NIO2.0 WatchService综合实战.wmv ├─Google Guava 第20讲-实战:手动实现一个EventBus-01快速搭建程序结构.wmv ├─Google Guava 第21讲-实战:手动实现一个EventBus-...
Otto 是基于 Guava 的,增强的事件总线,强调 Android 支持。 Otto 是把应用分离成不同部分,但是仍然可以很好的进行通讯。Otto 是从 Guava forked 而来,但是添加了许多独特的功能,而且精炼了事件总线。下载: ...
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
Guava:由Google提供的Java类库,提供了许多用于优化和提高开发效率的工具和组件,如Guava Cache(提供了缓存功能)、Guava EventBus(提供了事件总线功能)、Guava Cache(提供了缓存功能)等。 Spring Framework:...
jar包,亲测可用
jar包,亲测可用