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;
}
К сожалению, безрезультатно. Я надеюсь, что кто-то знает о простом и элегантном решении этой проблемы. Проект большой и поэтому его необходимо поддерживать и расширять, если это возможно.
Спасибо за любую помощь, которую вы можете оказать в этом сценарии.