[英]Handling different event types in Java BlockingQueue
我希望能够在同一个BlockingQueue
上发送不同的事件,这些事件只会携带数据。 鉴于我有以下代码:
private final BlockingQueue<Event> queue;
class EventA {private long data1;}
class EventB {private String otherData1;}
如何在同一个队列上同时发送EventA
和EventB
,然后让接收者负责投射到正确的 object?
我尝试了以下方法:
EventA
和EventB
具有相同的字段而失败。Object
,这只是感觉不对而且一般。我的问题是:在 Java 8 中处理这个案例的惯用方式是什么?
创建一个名为 Event 的接口,但由于我不希望 EventA 和 EventB 具有相同的字段而失败。
接口不规定实现它的类将具有哪些字段,只有方法。 由于每种事件类型都包含多个数据字段,因此比仅具有通用类型的Event
(例如, Event<String>
)更复杂。 您必须定义一个名为“Event”的接口,并在其中定义 1 个方法“ Map<String, ?> getData()
”,并让每个事件类型实现该方法。
事件的使用者不必知道它正在处理的具体事件类型是什么。 如果您确实想使用“ instanceof
”条件,您的界面可能有一个“ String getType()
”方法,每个事件都会实现并返回它的“名称”,但这是非常丑陋的设计,因为它需要更多的代码更改添加更多事件类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.