Desculpe Jordão,
Vc criou a classe GenericClass (??? vc quis dizer que retorna o valor T correto)?
depois a função T.class.getName(); (pega o nome da classe correto?)
Na classe exemploDAO vc tem que chamar a função da classe que ela esta sendo extendida.
Consegui arrumar um jeito. Acho que é pog !! hauhaua
Segue abaixo…
[code]public abstract class AbstractCRUDBO {
public Class<?> repository;
public AbstractCRUDBO()
{
ParameterizedType superclass = (ParameterizedType) getClass().getGenericSuperclass();
String s = ((ParameterizedType) superclass).getActualTypeArguments()[0].toString();
int inicio = s.lastIndexOf(".") + 1;
int fim = s.length();
repository = RepositoryFactory.getInstance().Create(s.substring(inicio,fim));
}[/code]
A pergunta de nosso amigo é pertinente. Descobrir qual é a “classe genérica” é uma espécie de gambiarra que a linguagem Java ainda permite. Em teoria, se não estou enganado, ela nem deveria permitir isso. Apesar disso, o próprio Gavin King faz uso desse código em seu GenericDAO publicado no livro Java Persistence with Hibernate.
O ideal é que você não precise usar este recurso, mas se a relação custo x benefício valer a pena, não tenha pudor em utilizá-la.
Eu preciso reconhecer qual a classe que está sendo passada no tipo genérico, pois eu faço uso de policy injection para criar um repositório do tipo em questão.
Utilizo um arquivo de propriedades que diz qual classe de entidade corresponde a qual DataBaseRepository da aplicação. Desta forma utilizo apenas uma classe abstrata que cuida de todos os métodos comuns aos repositórios de todoas as classes de domínio.
O método RepositoryFactory.getInstance().create(“Nome da entidade”) retorna o repositorio específico definido no arquivo de configuração.
Exemplo:
DAL.properties
EntityA = HibernateRepositoryA
============
DAL.java
[code]public class Teste{
void Teste(){
EnityA a = new EntityA();
a.setName("Teste");
Class<?> repository = RepositoryFactory.getInstance().create("EntityA");
((IEntityARepository)repository).save(a);
}
}[/code]
============
Espero ter ajudado um pouco. Qualquer coisa posso responder com maior clareza e exemplos.