繁体   English   中英

在 Java BlockingQueue 中处理不同的事件类型

[英]Handling different event types in Java BlockingQueue

我希望能够在同一个BlockingQueue上发送不同的事件,这些事件只会携带数据。 鉴于我有以下代码:

private final BlockingQueue<Event> queue;
class EventA {private long data1;}
class EventB {private String otherData1;}

如何在同一个队列上同时发送EventAEventB ,然后让接收者负责投射到正确的 object?

我尝试了以下方法:

  1. 创建一个名为 Event 的接口,但由于我不希望EventAEventB具有相同的字段而失败。
  2. 让队列取一个Object ,这只是感觉不对而且一般。
  3. 在一个Map中发送数据,带有一个叫做type的特殊字段,这也感觉不对。

我的问题是:在 Java 8 中处理这个案例的惯用方式是什么?

创建一个名为 Event 的接口,但由于我不希望 EventA 和 EventB 具有相同的字段而失败。

接口不规定实现它的类将具有哪些字段,只有方法。 由于每种事件类型都包含多个数据字段,因此比仅具有通用类型的Event (例如, Event<String> )更复杂。 您必须定义一个名为“Event”的接口,并在其中定义 1 个方法“ Map<String, ?> getData() ”,并让每个事件类型实现该方法。

事件的使用者不必知道它正在处理的具体事件类型是什么。 如果您确实想使用“ instanceof ”条件,您的界面可能有一个“ String getType() ”方法,每个事件都会实现并返回它的“名称”,但这是非常丑陋的设计,因为它需要更多的代码更改添加更多事件类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM