@Romka21

Java реализация метода?

Друзья подскажите как в java делать подобные вещи.

Вот есть методы типа:
public static List<User> findAll() {
        List<User> list = (List<User>)  HibernateSessionFactoryUtil.getSessionFactory().openSession().createQuery("From "+User.class.getSimpleName()).list();
        return list;
    }


public static List<Group> findAll() {
        List<Group> list = (List<Group>)  HibernateSessionFactoryUtil.getSessionFactory().openSession().createQuery("From "+Group.class.getSimpleName()).list();
        return list;
    }


Можно ли передавать некую конструкцию на входе, что бы сделать метод универсальным и не делать List list = (List) , шас получается что у меня для каждого объекта есть метод findAll() , который по сути одинаков по функционалу, но отличается описанием объектов. В голосу приходит только реализация в методе instanceOf
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
@ivorobioff
Software Engineer
да можно с помощью generics.

если бы у тебя небыли статические методы то можно было бы сделать так:

public class Repository<T> {
    
    public List<T> findAll() {
        List<T> list = (List<T>)  HibernateSessionFactoryUtil.getSessionFactory().openSession().createQuery("From "+User.class.getSimpleName()).list();
        return list;
    }
}


но со статическим методом только так:

public static <T> List<T> findAll(Class<T> type) {
        List<T> list = (List<T>)  HibernateSessionFactoryUtil.getSessionFactory().openSession().createQuery("From "+User.class.getSimpleName()).list();
        return list;
    }


ну и при использование это будет выглядеть так:

Repository.findAll(User.class);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
BostonGene Москва
от 100 000 до 200 000 руб.
Digital Horizon Москва
от 150 000 руб.
Sidenis Томск
До 170 000 руб.