Какой тип системы сообщений вы используете?
У многих есть опции для добавления фильтра к обработчикам на основе заголовка сообщения или содержимого. Если это поддерживается, вы просто создаете обработчик с фильтром, основанным на типе сообщения, тогда ваш код хорош и чист без необходимости в экземпляре или проверке типа (поскольку система обмена сообщениями уже проверила его для вас).
Я знаю, что вы можете сделать это в JMS или службе событий OSGi.
Поскольку вы используете JMS, вы можете сделать следующее, чтобы зарегистрировать своих слушателей. Это создаст слушателя для каждого уникального типа сообщения.
String filterMsg1 = "JMSType='messageType1'";
String filterMsg2 = "JMSType='messageType2'";
// Create a receiver using this filter
Receiver receiverType1 = session.createReceiver(queue, filterMsg1);
Receiver receiverType2 = session.createReceiver(queue, filterMsg2);
receiverType1.setMessageHandler(messageType1Handler);
receiverType2.setMessageHandler(messageType2Handler);
Теперь каждый обработчик будет получать только определенный тип сообщения (без instanceof или if-then), при условии, конечно, что отправитель устанавливает тип через вызовы setJMSType () в исходящем сообщении.
Этот метод встроен в сообщение, но вы, конечно же, можете создать собственное свойство заголовка и отфильтровать его.