Generic - Como pegar nome da classe?

Olá Pessoal,

Estou com dúvidas de como conseguir alcançar o nome de um tipo denérico. Por exemplo:

public class GenericClass{

      public String imprimeNome(){
             return T.class.getName();
      } 

}

public class ExemploDAO extends GenericClass{

}

public class Exemplo{}

==============

Existe alguma forma de eu conseguir saber o nome da classe T ?

Obrigado,

Abss

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.

Creio que seja isso.

A resposta simples é: não pega.

É possível com alguma manobra obscura (também conhecida como gambiarra), mas não foi feito pra isso…

Por que precisava disso? Melhor achar outra maneira de fazer…

Pessoal,

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]

Abs

Assim você não precisa usar o substring.

obs: só funciona em classes abstratas, ok? Se quiser uma solução um pouquinho mais ampla, ainda sim com restrições, veja http://stackoverflow.com/questions/182636/how-to-determine-the-class-of-a-generic-type

A questão é: pra que você quer informações específicas de tipo se a sua classe é genérica ?

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.

Abraço

Olá Pessoal,

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.

Abs a todos