Java: Как принудить параметр типа класса к быть таким же, как универсальный тип, указанный в универсальном методе?

Я создал класс 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);

Не вызывает ошибки компиляции, что я бы хотел, чтобы он делал.

7
задан Christopher Perry 1 June 2011 в 21:04
поделиться