У меня есть класс, который выполняет операции с базой данных, но я хочу сохранить его как можно более общим и абстрактным, таким образом, с помощью типов возвращаемых объектов.
Вот пример метода этого класса:
public static List<Object> getAll(String table) throws HibernateException{
Session sessie = HibernateUtil.getSessionFactory().openSession();
Transaction trans = sessie.beginTransaction();
List<Object> objects = sessie.createSQLQuery("SELECT * FROM " + table + ";").list();
trans.commit();
sessie.close();
return objects;
}
Теперь у меня есть другой класс User
, который должен иметь метод getAll
с типом возврата List<User>
, и реализация метода такая же.
Это вообще возможно? Я знаю, что невозможно перегрузить методы с разными типами возвращаемых данных. Это выполнимо с каким-то шаблоном проектирования, настройкой интерфейса?
Так что в принципе я не хочу делать реализацию снова, она уже указана в методе getAll
, который возвращает объект. Я просто хочу выполнить этот метод, но с динамическими типами возврата.
Причина, по которой я спрашиваю это, состоит в том, что я не хочу делать что-то еще в моем коде:
User user = new User(...);
// this should be user.getAll() and the type of that method should be an User, not an object
(User)user.getAll()
Причина, по которой я делаю это таким образом, состоит в том, что в будущем у меня могут быть другие таблицы, которые смогут вызывать метод getAll
, но получить приведенный объект в качестве возвращаемого типа, а не объекта типа.
Я смотрю на самое чистое и лучшее ОО-решение, даже если это означает, что мне нужно реструктурировать мой код.