У меня есть класс слушателя, который прослушивает объекты сообщений. Объекты сообщений проверяются для типов экземпляров, и соответствующее действие выполняется после определения типа экземпляра. Ниже приведен пример кодаИспользование оператора instanceof
public void onMessage(IMessage message){
if(message instanceof MoPn) {
doThis();
} else if(message instanceof MoAn) {
doThat();
} else if(message instanceof MoBn) {
doSomethingElse();
}
}
Я знаю, что это не самый лучший способ сделать это, но для старых причинам, я не могу изменить его. Теперь я хочу сделать асинхронным обработку сообщений. Все, что я хотел бы сделать, это проверить, попадает ли сообщение в интересующую вас категорию. Если да, поместите его в очередь для асинхронной обработки. Ниже приведен пример класса.
public class SampleClass
{
List<Class<? extends IMessage>> messageClasses = new ArrayList<Class<? extends IMessage>>();
SampleClass() {
messageClasses.add(moAn.class);
messageClasses.add(moBn.class);
messageClasses.add(moPn.class);
}
public void onMessage(IMessage message) {
for(IMessage messageClass : messageClasses) {
if(message instanceof messageClass) {
putItInTheQueue(message);
}
}
}
}
При написании кода, как указано выше, я не могу правильно отнести класс сообщений. Может ли кто-нибудь помочь мне написать синтаксически правильный код для следующего утверждения?
if(message instanceof messageClass )
Элементы вашего списка 'messageClasses' будут объектами' Class', а не 'IMessage'. –
Если вы делаете то же самое для каждого типа сообщений, почему проверка в первую очередь? Или это просто упрощенный пример? – biziclop