Почему этот тип не является допустимой заменой для параметр типа?

Я экспериментирую с использованием дженериков для поддержки настраиваемой структуры делегирования объектов (декораторов, оболочек). Я хочу построить цепочку делегаторов, реализующих целевой интерфейс, а также общий интерфейс делегатора.

У меня есть такая схема:

class Test {
    static interface Delegator {}

    static class DelegatorChain> {}

    static interface Foo {}

    static class FooDelegator implements Delegator, Foo {}

    public static void main(String[] args) {
        DelegatorChain chain = new DelegatorChain();
    }
}

Но при попытке создать экземпляр переменной цепочки компилятор жалуется :

Несоответствие привязки: Тип Test.FooDelegator не является допустимой заменой ограниченного параметра > типа Test.DelegatorChain

Я признаю, что дженерики для меня похожи на магию , но я могу каким-то образом признать, что FooDelegator - это не Foo, который расширяет Delegator , он просто реализует оба интерфейса.

Учитывая, что ясно, чего я хочу достичь, могу ли я что-нибудь сделать относительно дженерики, чтобы исправить это, или мне просто лучше об этом забыть?

10
задан Paŭlo Ebermann 12 August 2011 в 00:48
поделиться