¿Pueden los genéricos y los (súper?) Tokens de tipo ayudar a construir un agregador de noticias de tipo seguro?

Tengo este básicoNews interfaz

interface News {
    String getHeader();
    String getText();
}

y clases concretas comoSportsNews yFinancialNews para proporcionar métodos específicos comogetStockPrice(), getSport() y así. Las noticias están destinadas a ser enviadas a

interface Subscriber<N extends News> {
    void onNews(N news);
}

El problema es cómo registrar y mantener suscripciones. El primer enfoque que probé fue usar una centralAggregator, manteniendo un mapa entreClass<T> objetos ySet<Subscriber<T>>, pero pronto este enfoque reveló inviable. Aquí está la API deseada

public class Aggregator {

    public <N extends News> void subscribe(Subscriber<N> subscriber) {
        // TODO somehow (super type token) extract N and 
        // add the item to the set retrieved by getSubscribersFor()
    }

    public <N extends News> void dispatch(N news) {
        for (Subscriber<N> subscriber: getSubscribersFor(news.getClass())) {
            subscriber.onNews(news);
        }
    }

    private <N extends News> Set<Subscriber<N>> getSubscribersFor(Class<N> k) {
        // TODO retrieve the Set for the specified key from the Map
    }
}

¿Hay alguna alternativa para ser de tipo seguro? ¿Puede Java resolver este problema en absoluto? pongoesta pequeña demostración en línea para ayudarte a entender mejor cuál es realmente el problema.

ACTUALIZAR

Una alternativa sería hacerAggregator sí parametrizado con el tipo de noticias real. Esto estaría bien, excepto que es un problema del huevo y la gallina: ahora se necesita encontrar una manera de recuperar el agregador. En Java no hay forma de expresar lo siguiente

interface News {
    static Aggregator<CurrentClass> getAggregator();
}
static el método no puede serabstractno hay manera de hacer referencia a latipo actual en un argumento de tipo

Respuestas a la pregunta(4)

Su respuesta a la pregunta