В настоящее время я пишу XML-конвертер для проекта цепочки поставок. Мы используем Запросы и Заказы.Использование Метод общего типа
Конвертер имеет несколько методов, которые в настоящее время выполняют одно и то же, но отдельно реализуют запросы и заказы.
Поэтому я создал абстрактный класс для улучшения ремонтопригодности кода и используется общий тип:
public abstract class AbstractConverter<T extends BusinessObject>
Тогда у меня есть конкретные реализации для реальных преобразователей
public class OrderConverter extends AbstractConverter<Order>
public class RequestConverter extends AbstractConverter<Request>
Как я уже сказал , У меня есть несколько методов в двух конкретных классах, которые в основном делают то же самое, поэтому я, естественно, хочу их в абстрактном классе. Теперь я добавил следующий метод для абстрактного класса:
protected Comment createComment(T obj) {
String remark;
if (obj instanceof Order) {
remark = ((Order) obj).getRemark();
} else if (obj instanceof Request) {
remark = ((Request) obj).getRequestRemark();
} else {
throw new IllegalArgumentException("This method does not support objects of the type " + obj.getClass().toString());
}
return new Comment(remark);
}
Мой вопрос теперь: это путь, или есть более элегантный способ использовать дженерики в этом контексте?
Мне нужно это решение, но я также хочу использовать хороший стиль.
Что означает "в основном" означает? Нет «немного беременной». Они одинаковы, затем втягивают их в абстрактный класс или их нет, а затем реализуют отдельно (см. Ответ wero). Повышенная сложность и недостижимость, введя if/else/instanceof blocks - это ИМХО, действительно плохая идея. – Fildor