Цепочка методов:Как использовать трюк getThis()в случае многоуровневого наследования

Мой вопрос в контексте Цепочка методов + наследование плохо сочетаются друг с другом? . Но, к сожалению, все примеры/ответы цепочки методов используют один уровень наследования. Мой вариант использования включает в себя многоуровневое наследование, например

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

Есть ли лучший способ?

6
задан Community 23 May 2017 в 12:34
поделиться