Я создал класс NotificationManager, который позволяет вам зарегистрировать общий слушатель для некоторой универсальной службы уведомлений. В классе NotificationManager у меня есть общий метод для регистрации слушателя в службе:
public static <E> void registerNotify(Class<E> type, INotificationListener<E> listener) {
@SuppressWarnings("unchecked")
INotificationService<E> service = (INotificationService<E>) NotificationServiceFactory.get(type);
service.registerNotificationListener(listener);
}
Итак, для некоторого INotificationListener определенного типа я хотел бы заставить пользователя при вызове этого метода указать тот же тип, что и слушатель. Тип соответствует всем INotificationListeners одного и того же типа, однако этот метод не применяет то, что я пытаюсь применить. Например, я мог бы позвонить:
INotificationListener<Location> locationListener = this;
NotificationManager.registerNotify(String.class, locationListener);
, и код компилируется нормально. Я думал, что это приведет к следующему:
INotificationListener<Location> locationListener = this;
NotificationManager.registerNotify(Location.class, locationListener);
Есть идеи, как это сделать?
Обновление:
Извините за путаницу, вышесказанное действительно работает. Метод в том же классе, который не работает, на самом деле следующий:
public static <E> void broadcastNotify(Class<E> type, E data)
{
@SuppressWarnings("unchecked")
INotificationService<E> service = (INotificationService<E>) NotificationServiceFactory.get(type);
service.notifyListeners(data);
}
И вызов:
Location location = new Location();
NotificationManager.broadcastNotify(Object.class, location);
Не вызывает ошибки компиляции, что я бы хотел, чтобы он делал.