Java - унаследованный тип метода Fluent, возвращающий тип класса инцидента, а не родительский

Когда вы используете свободный подход, у вас может быть следующий сценарий:

public class Foo{

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

}


public class Bar extends Foo {

         public Bar barMethod(){

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

}


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

Преимущество свободного интерфейса в том, что вы можете связывать вызовы методов, но хотя Bar унаследовал someMethod (), тип возвращаемого значения - Foo not Bar, что приведет к разрыву следующей цепочки:

new Bar().someMethod().barMethod();

Одним из ответов может быть добавление @Overrides для каждого унаследованного метода, чтобы у Bar был дополнительный метод:

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

Но в больших классах и в расширенных иерархиях классов это может доказать беспорядок избыточности ?! Есть ли подходящий тип возврата, который нужно передать беглым методам, в результате чего каждый класс, который его наследует, вернет объект своего определенного типа (чтобы мы могли связывать методы без приведения)?

Я старался:

        public  U someMethod(){
          System.out.println("foo");
          return this;
    }

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

Спасибо за любую помощь, которую вы можете оказать в этом сценарии.

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

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