Мой вопрос в контексте Цепочка методов + наследование плохо сочетаются друг с другом? .Но, к сожалению, во всех примерах / ответах метода сцепления используется один уровень наследования.Мой сценарий использования включает многоуровневое наследование, например,
abstract class PetBuilder{...}
class DogBuilder extends PetBuilder{..}
class DogType1Builder extends DogBuilder {...}
. Для создания объекта Dog я буду использовать либо DogBuilder, либо DogType1Builder
, как использовать метод getThis для описанного выше варианта использования?
Я хочу использовать шаблон построения для построения сложного объекта Dog (объектная модель Dog) ". DogType1 будет иметь некоторые дополнительные свойства.
, чтобы использовать объявление getThis Trick длявышеупомянутые классы станут похожи на
abstract class PetBuilder<T extends PetBuilder<T>>
class DogBuilder<T extends DogBuilder<T>> extends PetBuilder<DogBuilder<T>>
class DogType1Builder extends DogBuilder<DogType1Builder>
Теперь это создает две проблемы
1.builder метод в «DogBuilder» будет выглядеть так:
public T someMethodInDog(String dogName) {
..
return (T)this; ///i dont want type casting and i cant use getThis Trick Here (compiler reports error for conversion from DogBuilder to T)
}
2.Как DogBuilder имеетстать параметризованным, поэтому для создания экземпляра "DogBuilder" мне придется использовать
DogBuilder<DogBuilder> builder=new DogBuilder(); //passing <DogBuilder> type ...real pain
Есть ли лучший способ?