#java #generics
#java #обобщения
Вопрос:
У меня есть требование, при котором DAO получит запрос на выборку данных из таблицы, где столбец СОСТОЯНИЯ является TECHERR. Для этого требования я написал код, подобный —
public void loadTable() {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<MyDTO> criteriaQuery = criteriaBuilder.createQuery(MyDTO.class);
Root<MyDTO> dashBoard = criteriaQuery.from(MyDTO.class);
ParameterExpression<String> p = criteriaBuilder.parameter(String.class);
criteriaQuery.select(dashBoard).where(criteriaBuilder.equal(dashBoard.get("status"), p));
TypedQuery<MyDTO> query = entityManager.createQuery(criteriaQuery);
query.setParameter(p, "TECHERR");
List<MyDTO> MyDtoList = query.getResultList();
}
Теперь у меня есть требование, чтобы было 5 похожих таблиц, в которых я должен сделать то же самое.
Одним из решений для этого является то, что я создаю 5 методов, аналогичных приведенным выше, для каждой таблицы и вызываю их.
Но есть ли какой-либо другой лучший способ, где я могу повторно использовать вышеупомянутый метод для разных DTO. Например, с помощью дженериков?
Примечание — Пожалуйста, не заботьтесь о сигнатуре метода и других вещах, таких как возвращаемый тип и т.д., Потому что кодирование продолжается.
Спасибо.
Комментарии:
1. Вы можете создать абстрактный класс DTO, и все классы MyDTO наследуют от него. В методе вместо List <MyDTO> , List<T> и можно было бы параметризовать метод public <T extended DTO> T loadTable ()…
2. по крайней мере, вы можете минимизировать код для дублирования, переупорядочив инструкции так, чтобы те, которые почти не зависят от типа, слипались вместе и расширяли их до метода с общим типом возвращаемого значения:
public <T> T fetchFromDatabase(...)
3. Спасибо Гастону и Тимоти за ваш быстрый ответ. Я попробую это.