У меня есть иерархия интерфейсов, с Child
реализация Parent
. Я хотел бы работать с неизменяемыми объектами, поэтому я хотел бы создать классы Builder
, которые бы удобно строили эти объекты. Однако у меня много интерфейсов Child
, и я не хочу повторять код для построения Parent
в каждом типе дочернего построителя.
Итак, предположим следующие определения:
public interface Parent {
public Long getParentProperty();
}
public interface Child1 extends Parent {
public Integer getChild1Property();
}
public interface Child2 extends Parent {
public String getChild2PropertyA();
public Object getChild2PropertyB();
}
Как я могу эффективно реализовать сборщики Child1Builder
и Child2Builder
? Они должны поддерживать работу, например:
Child1 child1 = Child1Builder.newChild1().withChild1Property(5).withParentProperty(10L);
и
Child2 child2 = Child2Builder.newChild2().withChild2PropertyA("Hello").withParentProperty(10L).withChild2PropertyB(new Object());
Я не хочу реализовывать специальный случай withParentProperty
для каждого дочернего построителя.
Отредактировано, чтобы добавить второе свойство в Child2
, чтобы уточнить, что это невозможно сделать с помощью простых дженериков. Я не ищу способ комбинировать Child1
и Child2
- Я ищу способ реализовать систему Builder
, которая не дублирует работу по созданию родительского класса для каждого дочернего класса.
Спасибо за любую помощь!