BaseFoo не может наследоваться с другими аргументами: <T, X.Bar <T >> и <T, X.Foo <T >>

Это упрощенная версияJava, унаследованный тип возврата метода Fluent в многоуровневых иерархиях.

Учитывая следующий код:

public enum X {
    ;
    static interface BaseFoo<T, S extends BaseFoo<T, S>> {
        S foo();
    }

    static interface Foo<T> extends BaseFoo<T, Foo<T>> {
        void foo1();
    }

    static interface BaseBar<T, S extends BaseBar<T, S>> extends BaseFoo<T, S> {
        S bar();
    }

    static interface Bar<T> extends BaseBar<T, Bar<T>>, Foo<T> {
        void bar1();
    }

}

бегатьjavac X.java Я получаю сообщение об ошибке:

X.java:15: error: BaseFoo cannot be inherited with different arguments: <T,X.Bar<T>> and <T,X.Foo<T>>
    static interface Bar<T> extends BaseBar<T, Bar<T>>, Foo<T> {
           ^

У кого-нибудь есть решение?

отказыватьсяЯ пытаюсь использовать шаблон для реализациисвободный интерфейс через иерархию наследования класса контейнера.

ФонЧтобы людям было проще понять, зачем мне это нужно, вот история. Я хочу создать контейнерное семейство:Traversal <-Sequence <-List, ТакTraversal есть методTraveral<T> accept(Visitor<T>) (нетPECS для краткости) этот метод всегда должен возвращатьthis после итерации посетителя через элементы. Когда у меняList типа, я хочу метод возвратаList<T> вместоTraversal<T> потому что я хочу, чтобы можно было назвать что-то вродеmyList.accept(v).head(15), гдеhead(int) это методList неTraversal

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

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