Ich habe eine NotificationManager-Klasse erstellt, mit der man einen generischen Listener für einen generischen Benachrichtigungsdienst registrieren kann. In der NotificationManager-Klasse habe ich eine generische Methode zur Registrierung eines Listeners bei einem Dienst:
public static <E> void registerNotify(Class<E> type, INotificationListener<E> listener) {
@SuppressWarnings("unchecked")
INotificationService<E> service = (INotificationService<E>) NotificationServiceFactory.get(type);
service.registerNotificationListener(listener);
}
Also, für einige INotificationListener eines bestimmten Typs möchte ich den Benutzer zwingen, beim Aufruf dieser Methode den gleichen Typ wie der Hörer anzugeben. Der Typ wird auf alle INotificationListener desselben Typs abgebildet, aber diese Methode erzwingt nicht, was ich zu erzwingen versuche. Zum Beispiel könnte ich aufrufen:
INotificationListener<Location> locationListener = this;
NotificationManager.registerNotify(String.class, locationListener);
und der Code lässt sich gut kompilieren. Ich dachte, dies würde das Folgende erzwingen:
INotificationListener<Location> locationListener = this;
NotificationManager.registerNotify(Location.class, locationListener);
Haben Sie eine Idee, wie man das erreichen kann?
Aktualisierung:
Entschuldigen Sie die Verwechslung, aber das oben genannte funktioniert tatsächlich. Die Methode in der gleichen Klasse, die nicht funktioniert, ist eigentlich die folgende:
public static <E> void broadcastNotify(Class<E> type, E data)
{
@SuppressWarnings("unchecked")
INotificationService<E> service = (INotificationService<E>) NotificationServiceFactory.get(type);
service.notifyListeners(data);
}
Und ruft an:
Location location = new Location();
NotificationManager.broadcastNotify(Object.class, location);
Dies führt nicht zu einem Kompilierungsfehler, was ich eigentlich möchte.