Как объект класса использует методы дженерика?
Есть дженерик класс c методом, который возвращает объект с определенным id:
public abstract class GenericHibernateDao<E> implements Dao<E> {
public static final Logger LOG = LogManager.getLogger(HibernateRoleDao.class);
private final Class<E> type;
public GenericHibernateDao(Class<E> type) {
super();
this.type = type;
}
@Override
public E findById(Long id) {
E entity;
try (Session session = HibernateSessionFactory.getSessionFactory().openSession()) {
entity = session.get(type, id);
} catch (Exception e) {
LOG.error(e.getMessage());
throw new RuntimeException(e);
}
return entity;
}
Также есть класс, наследующий дженерик и передающий через конструктор информацию о типе:
public class HibernateUserDao extends GenericHibernateDao<User> implements UserDao {
public HibernateUserDao() {
super(User.class);
}
Вопрос: что происходит при создании объекта класса HibernateUserDao, что я могу использовать метод findById(Long id) и находить именно юзеров? B объект класса HibernateUserDao как-то копируется метод из дженерик класса с уже подставленным значением type?