Мой вопрос в контексте Цепочка методов + наследование плохо сочетаются друг с другом? . Но, к сожалению, все примеры/ответы цепочки методов используют один уровень наследования. Мой вариант использования включает в себя многоуровневое наследование, например
abstract class PetBuilder{...}
class DogBuilder extends PetBuilder{..}
class DogType1Builder extends DogBuilder {...}
Чтобы создать объект Dog, я буду использовать либо DogBuilder, либо DogType1Builder
как использовать трюк getThis для вышеуказанного варианта использования?
Я хочу использовать шаблон построителя для построения сложного объекта Dog(Объектная модель Dog)" . DogType1 будет иметь некоторые дополнительные свойства.
Таким образом, использование объявления getThis Trick для вышеуказанных классов будет выглядеть как
abstract class PetBuilder>
class DogBuilder> extends PetBuilder>
class DogType1Builder extends DogBuilder
Теперь это создает две проблемы
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 builder=new DogBuilder(); //passing type...real pain
Есть ли лучший способ?