Dao genérico

7 respostas
W

Amigos,
estou seguindo a apostila da Caelum e estou tendo um erro em no Dao, exatamente este método

public List<T> listaTudo() {
	return this.session.createCriteria(T.class).list();
}

O erro que ocorre é

Exception in thread “main” java.lang.Error: Unresolved compilation problem:
Illegal class literal for the type parameter T

at br.com.asd.portal.dao.Dao.listaTudo(Dao.java:29)
at br.com.asd.portal.main.TestaUsuario.main(TestaUsuario.java:26)

Que erro é este? Como fazer funcionar?

Agradeço desde já.

7 Respostas

ajfilho

Mostre o código da sua declaração de classe…

Abraços!

W

Oi,
Obrigado pela ajuda.
Aqui esta a classe inteira.

package br.com.asd.portal.dao;

import java.util.List;

import org.hibernate.Session;

public class Dao {

private final Session session;

private final Class classe;
Dao(Session session, Class classe) {
	this.session = session;
	this.classe = classe;
}

public void adiciona(T u) {
	this.session.save(u);
}

public void remove(T u) {
	this.session.delete(u);
}

public void atualiza(T u) {
	this.session.merge(u);
}

public List<T> listaTudo() {
	return this.session.createCriteria(T.class).list();
}

public T procura(Long id) {
	return (T) session.load(T.class, id);
}

}

zoren

qual é o level de compilação do IDE que vc usa??

consegue usar em outra classe??

Generics só funciona no Java 1.5 ou +

Gerson_da_S_Lima

O seu problema está aqui

return this.session.createCriteria(T.class).list();

Você não pode fazer T.class, generics não aceita isso. Você deve utilizar aquele classe que você está pegando como parâmetro:

return this.session.createCriteria(classe).list();
W

Pessoal,
valeu pela ajuda.

Gerson,
é isso aí, alterei como voce falou e funcionou direitinho.

Obrigado

Mannes

Já que funcionou, coloque como post resolvido, para organizar e ajudar a outros com a mesma dúvida…

W

Aqui está.
A classe que funcionou ficou assim:

package br.com.asd.portal.dao;

import java.util.List;

import org.hibernate.Session;

public class Dao {

private final Session session;

private final Class classe;
Dao(Session session, Class classe) {
	this.session = session;
	this.classe = classe;
}

public void adiciona(T u) {
	this.session.save(u);
}

public void remove(T u) {
	this.session.delete(u);
}

public void atualiza(T u) {
	this.session.merge(u);
}

public List<T> listaTudo() {
	return this.session.createCriteria(classe).list();
}

public T procura(Long id) {
	return (T) session.load(classe, id);
}

}

Criado 18 de novembro de 2009
Ultima resposta 18 de nov. de 2009
Respostas 7
Participantes 5