Supondo que eu tivesse a classe de dominio: br.com.guj.Usuario
E na classe TesteClass eu irei printar o Class desse dominio.
public class TesteClass{
public void printClass() {
System.out.println(Usuario.class);
}
}
Utilizando a classe:
public class Teste {
public static void main(String... args) {
new TesteClass().printClass();
}
}
A saída seria: class br.com.guj.Usuario
Agora eu gostaria de deixar a classe TesteClass de forma genérica:
public class TesteClassGeneric<T>{
public void printClass() {
// A linha abaixo não irá compilar, é apenas para que vocês vejam o meu intuito.
System.out.println( T.class );
}
}
Utilizando a classe:
public class Teste {
public static void main(String... args) {
new TesteClassGeneric<Usuario>().printClass();
}
}
Gostaria que ao utilizar a classe de forma generica, lá na TesteClassGeneric ele conseguisse ver o Tipo que passei, e pudesse chegar ao .class dela.
li a matéria a respeito… .e é exatamente isto que preciso.
Vou realizar os testes quando chegar em casa… e dou o feedback.
Muitissimo Obrigado.[/quote]
Eu acho que da forma que você quer não dá pra fazer.
Esse exemplo da caelum é para uso de herança.
Você teria que estender a classe que contém o método printClass() para poder usar o recurso.
Tipo assim:
public class TesteClassGeneric<T> {
private final Class<T> tClass;
public TesteClassGeneric() {
this.tClass =
(Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
public void printClass() {
System.out.println(tClass);
}
}
public class Teste extends TesteClassGeneric<Usuario>{
public static void main(String... args) {
new TesteClassGeneric().printClass();
}
}
Realizei os testes com a sugestão do Romarcio, e de fato funcionaram muito bem.
Queria agradecer a todos pela ajuda!
Levantei essa questão para usar numa classe DAO que fosse Base para todas as outras DAOs do sistema.
E nessa classe basica no caso… BaseDAO … tem os metodos comuns tipo save, update e delete, e não estava conseguindo definir um metodo base para um “listarTodos()” usando session.createCriteria( Dominio.class ).list()
Sendo assim como minha DominioDAO extends BaseDAO<Dominio> agora posso deixar inclusive caras como um listTodos() na classe BaseDAO e especializar as consultas quando necessário.