Os genéricos e os tokens do tipo (super?) Ajudam a criar um agregador de notícias seguro de tipos?

Eu tenho esse básicoNews interface

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

e aulas concretas comoSportsNews eFinancialNews para fornecer métodos específicos comogetStockPrice(), getSport() e assim por diante. As notícias destinam-se a ser enviadas para um

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

O problema é como registrar e manter assinaturas. A primeira abordagem que tentei foi usar uma centralAggregator, mantendo um mapa entreClass<T>&nbsp;objetos eSet<Subscriber<T>>, mas logo esta abordagem revelou inviável. Aqui está a API desejada

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
    }
}

Existe alguma alternativa para ser seguro? O Java pode resolver esse problema? Eu colocoesta pequena demonstração online&nbsp;para ajudá-lo a entender melhor qual é o problema.

ATUALIZAR

Uma alternativa seria fazerAggregator&nbsp;se parametrizado com o tipo de notícia real. Isso seria ok, exceto que é um problema de galinha e ovo: agora é preciso encontrar uma maneira de recuperar o agregador. Em Java não há como expressar o seguinte

interface News {
    static Aggregator<CurrentClass> getAggregator();
}
static&nbsp;método não pode serabstractnão há como referenciartipo atual&nbsp;em um argumento de tipo