Java - Inherited Fluent method retorna o tipo para retornar o tipo de classe de incidente, não o de pais

Quando você emprega uma abordagem fluente, você pode ter o seguinte cenário:

public class Foo<T extends a>{

    public Foo<T> someMethod(){
          System.out.println("foo");
          return this;
    }

}


public class Bar<T extends b> extends Foo<T> {

         public Bar<T> barMethod(){

            System.out.println("bar");
            return this;
         }

}


public class a{}
public class b extends a{}

A força de uma interface fluente é que você pode encadear invocações de método, mas enquanto Bar herdou algum método (), o tipo de retorno é Foo não Bar, que quebraria a seguinte cadeia:

new Bar<b>().someMethod().barMethod();

Uma resposta poderia ser adicionar @Overrides para cada método herdado, de forma que Bar tenha o método adicional:

 @Override
 public Bar<T> someMethod(){
          System.out.println("foo");
          return this;
    }

Mas em grandes classes e hierarquias de classes estendidas isso pode ser uma bagunça de redundância certamente ?! Existe um tipo de retorno apropriado para dar a fluentes métodos em que cada classe que herda ele retornará um objeto de seu tipo específico (para que possamos encadear métodos sem elencos)?

Eu tentei:

        public <U extends Foo<T>> U someMethod(){
          System.out.println("foo");
          return this;
    }

Infelizmente, sem sucesso. Espero que alguém conheça uma solução simples e elegante para esse problema. O projeto é grande e, portanto, precisa ser mantido e extensível, se possível.

Obrigado a qualquer ajuda que você possa fornecer neste cenário.