目前我有一种消耗队列事件的方法。根据类型我调用适当的方法来处理它。
private void consumeQueue() {
MyQueue myQueue = MyQueue.getInstance();
Iterator mIterator = myQueue.iterator();
while (mIterator.hasNext()) {
Object mEvent = null;
try {
mEvent = mIterator.next();
mIterator.remove();
} catch (NoSuchElementException e) {
return;
}
if (mEvent instanceof EventOne)
handleOne((EventOne) mEvent);
else if (mEvent instanceof EventTwo)
handleTwo((EventTwo) mEvent);
...
}
}
让我们假设开发人员在其他地方排队了一种新类型的事件,我们称之为EventThree。以这种方式这样做我不能确定开发人员是否会正确处理EventThree的消费。
是否有任何模式,所以我可以强制(在编译时)开发人员,以处理EventThree的消费?
答案 0 :(得分:0)
据我所知,您的MyQueue
类实现了Queue
interfance。您不应该在代码中使用raw types。考虑将MyQueue
用作具有某种类型参数的泛型类:
MyQueue<EventOne> myQueue = MyQueue.getInstance();
你还必须改变getInstance()
方法。优雅的解决方案可能如下所示:
<T> MyQueue<T> getInstance(Class<T> clazz) {
if (clazz == EventOne.class) {
// ...
} else if (clazz == EventTwo.class) {
// ...
}
}
P.S。遗憾的是,由于Java type erasure,您无法使用不同的getInstance()
类型参数定义两个Queue
方法。