例子:
抛出的事件的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事件机制 EventBus是Google Guava项目的一部分,提供了一个轻量级的事件机制实现。它基于观察者模式(或发布订阅模式),主要分为三部分:发布者、监听者、事件。EventBus的使用非常简单,只需要定义事件...
EventBus 是一个基于事件的一个发布/订阅框架,通过解耦发布者和订阅者简化事件传递,这里的事件可以理解为消息,本文中统一称为事件也就是 Event。通过EventBus可以简化生产者/消费者 这种模型,同时又可以通过...
eventBus android 跨页面异步传输数据 可用于异步网络请求和 异步跨页面传数据
在 Guava EventBus 的使用中,`@Subscribe` 注解是核心概念,它标记了那些监听并处理事件的方法。然而,为了保证 EventBus 的正确使用,开发者需要注意`@Subscribe` 注解的方法应遵循一定的规范,比如方法参数的数量...
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 第19讲-Guava之EventBus和NIO2.0 WatchService综合实战.wmv ├─Google Guava 第20讲-实战:手动实现一个EventBus-01快速搭建程序结构.wmv ├─Google Guava 第21讲-实战:手动实现一个EventBus-...
在本文中,我们将深入探讨如何在SpringBoot应用中使用EventBus,这是一个基于Guava库的事件总线系统。EventBus的引入使得松耦合的组件间通信变得更加简单和高效。让我们一起通过步骤来理解这个“SpringBoot+EventBus...
Otto 是基于 Guava 的,增强的事件总线,强调 Android 支持。 Otto 是把应用分离成不同部分,但是仍然可以很好的进行通讯。Otto 是从 Guava forked 而来,但是添加了许多独特的功能,而且精炼了事件总线。下载: ...
本资料主要围绕Guava中的两个关键特性进行探讨:函数式接口及其在Guava中的应用,以及Guava的EventBus事件总线机制的源码分析和使用经验。 首先,我们来了解一下Guava中的函数式接口。函数式接口是指只有一个抽象...
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
8. **事件监听**:Guava的EventBus可以方便地实现发布/订阅模式,简化事件驱动的编程。 9. **枚举集与常量**:Guava提供了ImmutableEnumSet和ImmutableSet.of()等方法,创建不可变且高效的枚举集合。 `guava-18.0-...