Как сделать метод обобщенным

#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. Спасибо Гастону и Тимоти за ваш быстрый ответ. Я попробую это.