Я изучаю с использованием шаблона проектирования Builder для создания подклассов родительского объекта, основанного исключительно на общем типе подкласса. Эта фраза является своим родом запутанной, вот что я имею в виду:Создайте подкласс с использованием родительского генератора Builder
public class Animal(){
private String name;
private String gender;
public Animal(Builder<?> builder){
this.name = builder.name;
this.gender = builder.gender;
}
public static Builder<T extends Animal>{
private String name;
private String gender;
public Builder<T> setName(String name){
this.name = name;
return this;
}
public Builder<T> setGender(String gender){
this.gender = gender;
return this;
}
public T build(Class<T> clazz){
try {
Constructor<T> c = clazz.getDeclaredConstructor(Builder.class);
c.setAccessible(true);
return c.newInstance(this);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
}
Кроме этого, это заканчивается тем, что, скорее подвержены ошибкам и «хак». Я хочу иметь один Builder, который создает все подклассы.
Вопрос
Есть ли лучший способ сделать это? Возможно, шаблон дизайна Builder просто не подходит для моих нужд. Это работает, но не кажется правильным.
ПРИМЕЧАНИЕ. Истинные потребности этого вопроса не такие тривиальные, как пример класса животных. Вы можете себе представить, что я пытаюсь создать подкласс для родительского класса, который содержит много аргументов. Использование шаблона построителя сделает это намного проще для создания экземпляров и будет легче распространяться на будущие подклассы.
Подклассы объектов будут иметь свои собственные методы ТОЛЬКО. Никаких дополнительных полей, только методы, строго определенные для их типа подкласса.
I.e. Утка является подклассом птицы, и она крякает. Эму является подклассом птицы, но я не хочу, чтобы она была в шарлатанстве, она будет работать только. Но я хочу, чтобы у них было имя и пол.
Кто-то оставил комментарий относительно того, почему я это здесь, а не в проверке кода. Причина в том, что это подлинный вопрос StackOverflow ... Я представил код, который я пробовал, но знаю, что это не чистое решение Java. Я хотел, чтобы кто-то помог мне получить лучший ответ, используя мой примерный код, как отправную точку для создания и отображения. – rosenthal