Olá,
Estou começando a fazer umas implementações com generics, e em um determinado momento preciso pegar o tipo da classe que foi passada. Certa vez vi isto em um exemplo… mas não consegui fazer funcionar. O tipo em questão retorna nulo.
Fiz 3 pequenas classes resumindo o que eu queria. Se alguém tiver alguma idéia de como fazer, agradeço.
Está imprimindo null ou está dando NullPointerException?
Esse código aí não deveria estar imprimindo nada.
gustavodelgado
Desculpe… é NullPointerException mesmo, rs
Quando eu coloco System.out.println(klass); é que imprime null.
[]s
gustavodelgado
this.getClass() retorna “Generics2”. Eu queria algo que retornasse SetorNivel por exemplo…
Mauricio_Linhares
Não dá pra fazer isso do jeito que você está querendo, porque as informações dos tipos genéricos não existem em tempo de execução. Pra fazer isso você tem que passar uma referência para o seu tipo de classe em algum lugar.
gustavodelgado
Não dá pra fazer isso do jeito que você está querendo, porque as informações dos tipos genéricos não existem em tempo de execução. Pra fazer isso você tem que passar uma referência para o seu tipo de classe em algum lugar.
Na verdade eu vi um exemplo de um DAO genérico de um colega meu que era o seguinte:
publicclassGenericoDAOHibernateImpl<GDAOHI>extendsHibernateDaoSupportimplementsGenericoDAO<GDAOHI>{privateLoglogger=LogFactory.getLog(this.getClass());privateClass<GDAOHI>obj;publicbooleaninsert(GDAOHIobjeto){try{getHibernateTemplate().save(objeto);returntrue;}catch(DataAccessExceptiondae){logger.error("Erro ao gravar os dados!");returnfalse;}}publicbooleandelete(GDAOHIobjeto){try{getHibernateTemplate().delete(objeto);returntrue;}catch(DataAccessExceptiondae){logger.error("Erro ao gravar os dados!");returnfalse;}}publicList<GDAOHI>list(){returngetHibernateTemplate().executeFind(newHibernateCallback(){publicObjectdoInHibernate(Sessionsession)throwsHibernateException{Criteriacriteria=session.createCriteria(obj);returncriteria.list();}});}publicGDAOHIload(longid){return(GDAOHI)this.getHibernateTemplate().load(obj,id);}}
Repare no atributo “obj”, e como ele o utiliza no método “list”. Não seria o mesmo caso? Como isso pôde funcionar com ele? rs
Valeu.
B
Bussunda
o erro esta aqui?
voce nao inicializou o atributo klass em lugar nenhum desse codigo
tenta imprimir o seguinte