2

我以为我对我提出的另一个问题有一个很好的解决方案,但现在我认为它不会奏效。

在奥托,如果我做这样的事情:

@Subscribe public void foo(ApiRequestEvent<Foo> event) {
}

@Subscribe public void bar(ApiRequestEvent<Bar> even) {
}

ApiRequestEvent<>如果我将任何实例发布到总线上,似乎这两种方法都会被调用。那是什么预期的?

我怀疑发生这种情况是因为在 Java 中实际上只有一个 class ApiRequestEvent,而 Otto 正在查看该类而忽略了类型参数。

在我放弃这种方法之前,是否还有这种方法?我打算使用这个参数化类作为我想要订阅的事件的“签名”。

4

1 回答 1

1

那是对的。类型参数将被忽略。

我的典型方法是为所有事件类型定义一个 Enum,订阅者方法可以检查它以过滤掉他们感兴趣的事件。

不幸的是,因为枚举所有事件类型会变得很麻烦,所以这当然不能很好地扩展。

于 2014-05-13T03:39:42.107 回答