BaseFoo não pode ser herdado com argumentos diferentes: <T, X.Bar <T >> e <T, X.Foo <T >>

Esta é uma versão simplificada doJava herdou o tipo de retorno do método Fluent em hierarquias de vários níveis.

Dado o seguinte código:

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();
    }

}

correjavac X.java Eu recebo a mensagem de erro:

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> {
           ^

Alguém tem alguma solução?

Renúncia: Estou tentando usar o padrão para implementar ointerface fluente através de uma hierarquia de herança de classe de contêiner.

fundo: para tornar mais fácil para as pessoas entenderem por que eu preciso disso, aqui está a história. Eu quero criar uma família de contêineres:Traversal <-Sequence <-List. assimTraversal tem um métodoTraveral<T> accept(Visitor<T>) (nãoPECS para breve), este método deve sempre retornarthis depois de iterar o visitante pelos elementos. Quando eu tenho umList tipo, quero o retorno do métodoList<T> ao invés deTraversal<T> porque eu quero tornar possível chamar algo comomyList.accept(v).head(15), Ondehead(int) é um método deList nãoTraversal

questionAnswers(1)

yourAnswerToTheQuestion