Bom Dia Galera!
Implementei uma classe DAO generica para realizar operações em um banco.
Só não consegui entender o o que faz uma parte classe, é o seguinte:
Tenho uma variável final ‘oClass’ na minha classe do tipo Class, no construtor da minha classe eu inicializo essa variavel com uma linha de código que não entendi, alguém pode me explicar o que essa linha ta fazendo? O que minha variavel oClass do tipo Class esta recebendo com essa inicialização?
Se puderem me detalhar o máximo possivel, pois sou iniciantes e algumas vezes algumas coisas não ficam tão claras.
a classe é essa
public class GenericDAOImp<T, ID extends Serializable> implements GenericDAO<T,ID> {
public EntityManagerFactory emf;
private EntityManager em = null;
public EntityTransaction et;
private final Class<T> oClass;
public GenericDAOImp() {
this.oClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
emf = Persistence.createEntityManagerFactory("persistencia");
}
public Class<T> getOClass() {
return oClass;
}
public EntityManager getEm() {
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
/*public void Teste(){
em = emf.createEntityManager();
ArrayList<CdUsers> listaCd = (ArrayList<CdUsers>) em.createQuery("select c from CdUsers c").getResultList();
for(Iterator iter = listaCd.iterator(); iter.hasNext();){
CdUsers cd = (CdUsers) iter.next();
System.out.println("valor: "+cd.getIdUser());
}
em.close();
}*/
@Override
public Class<T> getObjectClass() {
// TODO Auto-generated method stub
return null;
}
@Override
public List<T> listPesq(String query) {
em = emf.createEntityManager();
Query q = getEm().createQuery(query);
List<T> lista = q.getResultList();
em.close();
return lista;
}
@Override
public List<T> listPesqParam(String query, Map<String, Object> params) {
em = emf.createEntityManager();
Query q = getEm().createQuery(query);
for(String chave:params.keySet()){
q.setParameter(chave, params.get(chave));
}
List<T> lista = q.getResultList();
em.close();
return lista;
}
@Override
public T pesqParam(String query, Map<String, Object> params) {
em = emf.createEntityManager();
Query q = getEm().createQuery(query);
for(String chave:params.keySet()){
q.setParameter(chave, params.get(chave));
}
try{
T valor = (T) q.getSingleResult();
em.close();
return valor;
}catch(NoResultException nre){
em.close();
return null;
}
}
@Override
public T pesquisaPorId(ID id) {
em = emf.createEntityManager();
T valor = getEm().find(oClass, id);
em.close();
return valor;
}
@Override
public List<T> todos() {
String queryS = "SELECT obj FROM "+oClass.getSimpleName()+" obj";
em = emf.createEntityManager();
Query query = getEm().createQuery(queryS);
List<T> lista = query.getResultList();
em.close();
return lista;
}
}
a linha que não consigo entender é essa, dentro do construtor
this.oClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
Se alguém puder me explicar certinho,
Desde já agradeço
