Конфликт стирания Java в классах, реализующих Hazelcast MessageListener с разными объектами сообщений

В настоящее время используется Hazelcast 3.0 и пытается настроить разные темы с разными объектами сообщений, и я хотел бы иметь классы, которые могут прослушивать более одной темы, но я не вижу, как это возможно, потому что разные методы onMessage () такое же стирание. Вот мой класс конфигурации Hazelcast:

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.ITopic;
import com.hazelcast.core.MessageListener;

public class HazelcastHelper {

  //List of Topics
  public static final String TIMER = "TIMER";
  public static final String POINTS = "POINTS";

  public static class TimerMO {}
  public static class PointsMO {}

  private HazelcastInstance hz = null;

  public HazelcastInstance getHazelcastInstance() {
    if (hz == null) {
        hz = Hazelcast.newHazelcastInstance();
        ...
    }
    return hz;
  }

  public ITopic<TimerMO> getTimerTopic() {
    return this.getHazelcastInstance().getTopic(TIMER);
  }

  public void publishTimer(TimerMO message) {
    this.getTimerTopic().publish(message);
  }

  public String addTimerListener(MessageListener<TimerMO> messageListener) {
    return this.getTimerTopic().addMessageListener(messageListener);
  }

  public ITopic<PointsMO> getPointsTopic() {
    return this.getHazelcastInstance().getTopic(POINTS);
  }

  public void publishPoints(PointsMO message) {
    this.getPointsTopic().publish(message);
  }

  public String addPointsListener(MessageListener<PointsMO> messageListener) {
    return this.getPointsTopic().addMessageListener(messageListener);
  }
}

Тогда у меня есть, например, суперкласс, который прослушивает тему, основанную на одном из объектов сообщения:

import com.hazelcast.core.Message;
import com.hazelcast.core.MessageListener;

public class TimerListener implements MessageListener<HazelcastHelper.TimerMO> {
  @Override
  public void onMessage(Message<HazelcastHelper.TimerMO> message) {
    ...
  }
}

а затем подкласс, который прослушивает второй тип объекта сообщения:

import com.hazelcast.core.Message;
import com.hazelcast.core.MessageListener;

public class PointsListener extends TimerListener implements MessageListener<HazelcastHelper.PointsMO> {
  @Override
  public void onMessage(Message<HazelcastHelper.PointsMO> message) {
    ...
  }
}

Но, как вы могли видеть, это не допускается, потому что существует конфликт стирания между суперклассом и подклассом, которые реализуют MessageListener, но для разных типов классов MessageObject. Обратите внимание, что мне также может понравиться один класс, который прослушивает оба типа сообщений, которые также будут работать из-за конфликта стирания.

Я что-то упускаю? Разве это не обычный сценарий использования Hazelcast для создания тем и слушателей? Я бы хотел, чтобы моя реализация была чистой и не нужно анализировать сообщения для оценки того, какой тип они есть - мне кажется, что Hazelcast не создал чистый дизайн, но, возможно, мне не хватает, как настраивать темы, сообщения и слушатели правильно. Пожалуйста, помогите мне понять, как это решить.

java,listener,hazelcast,erasure,

0

Ответов: 0

Конфликт стирания Java в классах, реализующих Hazelcast MessageListener с разными объектами сообщений

В настоящее время используется Hazelcast 3.0 и пытается настроить разные темы с разными объектами сообщений, и я хотел бы иметь классы, которые могут прослушивать более одной темы, но я не вижу, как это возможно, потому что разные методы onMessage () такое же стирание. Вот мой класс конфигурации Hazelcast:

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.ITopic;
import com.hazelcast.core.MessageListener;

public class HazelcastHelper {

  //List of Topics
  public static final String TIMER = "TIMER";
  public static final String POINTS = "POINTS";

  public static class TimerMO {}
  public static class PointsMO {}

  private HazelcastInstance hz = null;

  public HazelcastInstance getHazelcastInstance() {
    if (hz == null) {
        hz = Hazelcast.newHazelcastInstance();
        ...
    }
    return hz;
  }

  public ITopic<TimerMO> getTimerTopic() {
    return this.getHazelcastInstance().getTopic(TIMER);
  }

  public void publishTimer(TimerMO message) {
    this.getTimerTopic().publish(message);
  }

  public String addTimerListener(MessageListener<TimerMO> messageListener) {
    return this.getTimerTopic().addMessageListener(messageListener);
  }

  public ITopic<PointsMO> getPointsTopic() {
    return this.getHazelcastInstance().getTopic(POINTS);
  }

  public void publishPoints(PointsMO message) {
    this.getPointsTopic().publish(message);
  }

  public String addPointsListener(MessageListener<PointsMO> messageListener) {
    return this.getPointsTopic().addMessageListener(messageListener);
  }
}

Тогда у меня есть, например, суперкласс, который прослушивает тему, основанную на одном из объектов сообщения:

import com.hazelcast.core.Message;
import com.hazelcast.core.MessageListener;

public class TimerListener implements MessageListener<HazelcastHelper.TimerMO> {
  @Override
  public void onMessage(Message<HazelcastHelper.TimerMO> message) {
    ...
  }
}

а затем подкласс, который прослушивает второй тип объекта сообщения:

import com.hazelcast.core.Message;
import com.hazelcast.core.MessageListener;

public class PointsListener extends TimerListener implements MessageListener<HazelcastHelper.PointsMO> {
  @Override
  public void onMessage(Message<HazelcastHelper.PointsMO> message) {
    ...
  }
}

Но, как вы могли видеть, это не допускается, потому что существует конфликт стирания между суперклассом и подклассом, которые реализуют MessageListener, но для разных типов классов MessageObject. Обратите внимание, что мне также может понравиться один класс, который прослушивает оба типа сообщений, которые также будут работать из-за конфликта стирания.

Я что-то упускаю? Разве это не обычный сценарий использования Hazelcast для создания тем и слушателей? Я бы хотел, чтобы моя реализация была чистой и не нужно анализировать сообщения для оценки того, какой тип они есть - мне кажется, что Hazelcast не создал чистый дизайн, но, возможно, мне не хватает, как настраивать темы, сообщения и слушатели правильно. Пожалуйста, помогите мне понять, как это решить.

00Java, слушатель, hazelcast, стирание,