Boa tarde, pessoal,
Estou com um problema que acredito que vocês já devem ter passado. Preciso de um método que descubro o tipo do passado por generics em tempo de execução. Para tal, 99% das respostas encontradas na interface, recaem sobre a mesma linha de código.
Dado uma classe A, para obter o tipo “B”, devemos fazer?
public class A<B>{
Class objectClass;
public void setObjectClass()
{
ParameterizedType tipo = (ParameterizedType)this.getClass().getGenericSuperclass();
objectClass = (Class)tipo.getActualTypeArguments()[0];
//aqui coloquei essa linha para ver o resultado apenas
System.out.println(objectClass.toString());
}
}
PS: se tiver erro de digitação ignorem pois eu escrevi o código não copiei e colei pois o original é bem maior
Bom, o código já dá erro na primeira linha. java.lang.ClassCastException: java.lang.Class . Claro, o método “getGenericSuperclass()” retorna um objeto do tipo class e estou fazer um cast para ParameterizedType que está dando pau.
Mas todo lugar que vou, passam essa solução e simplesmente não funciona aqui. Já passei para uns três amigos aqui no trabalho e ninguem descobre. Alguém aqui, tem idéia do que acontece? Estou pensando em abortar a idéia de usar Generics nos meus projetos pois estou com receio de mais erros estranhos.
Antes que alguém sugira, tambem já fiz esse teste: Criar uma subclasse e partir chamar a generica. Ficou algo assim:
public class TesteDAO()
{
public TesteDAO(){
new A();
//Bean sendo um bean válido qualquer
}
}
O resultado desejado é que objectClass, seja um object Class do tipo Bean e com isso eu possa fazer um “.getSimpleName” e ele me retorne a String “Bean”.
Espero ter conseguido expressar meu problema e que alguém possa me ajudar. USo JDK 5.0 aqui no trabalho. Mas se o problema for versão em casa tenho o 6.0 (mas não fiz todos os testes que já fiz aqui).
Agradeço qualquer ajuda.