Могут ли дженерики и (супер?) Типовые токены помочь в создании безопасного для типов агрегатора новостей?

У меня есть это основноеNews интерфейс

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

и конкретные классы, такие какSportsNews а такжеFinancialNews предоставить конкретные методы, такие как,getStockPrice()getSport() и так далее. Новости предназначены для отправки на

interface Subscriber {
    void onNews(N news);
}

Проблема в том, как зарегистрировать и поддерживать подписку. Первым подходом, который я попробовал, было использование центральногоAggregator, сохраняя карту междуClass объекты иSetНо вскоре такой подход оказался нежизнеспособным. Вот желаемый API

public class Aggregator {

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

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

    private  Set getSubscribersFor(Class k) {
        // TODO retrieve the Set for the specified key from the Map
    }
}

Есть ли альтернатива безопасному типу? Может ли Java решить эту проблему вообще? я кладуэто небольшое демо онлайн чтобы помочь вам лучше понять, в чем проблема на самом деле.

ОБНОВИТЬ

Альтернативой было бы сделатьAggregator сам параметризован с фактическим типом новостей. Это было бы хорошо, за исключением того, что этоПроблема курицы и яйца: теперь нужно найти способ получить агрегатор. На Яве естьнет возможности выразить следующее

interface News {
    static Aggregator getAggregator();
}
static метод можетт бытьabstractтам'нет никакого способа сослаться натекущий тип в аргументе типа

Ответы на вопрос(4)

Ваш ответ на вопрос