Boa tarde meus amigos, desenvolvi um método mais genérico de acordo com meu modelo e foi necessário fazer um casting do tipo downcasting, alguem pode me auxiliar ou indicar uma forma melhor que a minha ? Segue abaixo o código
public Atividade carregarAtividade(Integer idPessoa, Class<? extends Atividade> clazz) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<? extends Atividade> q = cb.createQuery(clazz);
Root<? extends Atividade> from = q.from(clazz);
q.where(cb.equal(from.get("pessoa"), idPessoa));
TypedQuery<? extends Atividade> typedQuery = em.createQuery(q);
try {
Atividade singleResult = typedQuery.getSingleResult();
return singleResult;
} catch (NoResultException ex) {
return null;
}
}
No caso, a hierarquia do meu modelo é a seguinte.
Interface Atividade
Cliente implements Atividade
Fornecedor implements Atividade
Na chamada do método precisei fazer o casting ficando do seguinte jeito
Cliente cli = (Cliente) pessoaDao.carregarAtividade(4731, Cliente.class);
Fornecedor f = (Fornecedor) pessoaDao.carregarAtividade(4731, Fornecedor.class);
Em teoria nunca vai dar erro, pois eu sei exatamente qual o tipo de atividade vai retornar, isso vai me trazer problemas ? Tem alguma forma melhor?
Grato desde já.