Class<T> - Como descobrir a classe de T em execução

3 respostas
D

Olá Galera,

estou com uma dúvida básica de reflexão…

Quero fazer o seguinte:

AbstractCtrl<T> que será especializado conforme seu tipo. Dentro desse AbstractCtrl<T> terá instanciado um GenericDao<T>.
Porém para funcionar perfeitamente eu preciso saber qual a Classe desse T quando preciso listar no hibernate.
Apenas para refrescar, o hibernate utiliza o seguinte:

sessaoHibernate.createCriteria(classe de T).list();

Alguém tem uma idéia de como posso fazer isso?

Obrigado.

3 Respostas

E

Não entendo de Hibernate, mas para saber qual class você está utilizando você pode utilizar:

T.class - retorna um class

ou

T.class.getName() - retorna uma Strings

Veja qual o ideal para a situação que você quer e boa sorte.

D
evandro.santos:
Não entendo de Hibernate, mas para saber qual class você está utilizando você pode utilizar:

T.class - retorna um class

ou

T.class.getName() - retorna uma Strings

Veja qual o ideal para a situação que você quer e boa sorte.

Olá.

Essa foi a primeira solução testada por mim, mas não é possível.
Apresenta o seguinte erro:

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

Através de pesquisas na internet cheguei ao seguinte código:

public class GenericDAO<T> {
	
	protected Class<T> classe;
	
	public GenericDAO(){
		ParameterizedType paramType = (ParameterizedType) (getClass().getGenericInterfaces()[0]);
		this.classe = (Class<T>) (paramType.getActualTypeArguments()[0].getClass());
	}
}

Mas a classe retornada é sempre a mesma:

class sun.reflect.generics.reflectiveObjects.TypeVariableImpl

Obrigado.

S
public class GenericDAO&lt;T&gt; {
	
	protected Class&lt;T&gt; classe;
	
	public GenericDAO(){
		ParameterizedType paramType = (ParameterizedType) (getClass().getGenericInterfaces()[0]);
		this.classe = (Class&lt;T&gt;) (paramType.getActualTypeArguments()[0].getClass());
	}
}

Para funcinar um ParameterizedType vc tera que criar um classe que estende dessa classe...

public class EmpresaDAO extends GenericAbstractDAO&lt;Empresa&gt;

Assim vai funcionar...

Se conseguir de outro jeito me fala...

Criado 7 de novembro de 2008
Ultima resposta 10 de nov. de 2008
Respostas 3
Participantes 3