Dao genérico

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á.

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

Abraços!

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);
}

}

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

consegue usar em outra classe??

Generics só funciona no Java 1.5 ou +

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(); 

Pessoal,
valeu pela ajuda.

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

Obrigado

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

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);
}

}