public class Teste<T>
{
public Class getRealGenericType()
{
}
}
e instanciada assim
Teste<String> t = new Teste<String>();
Há como escrever um método que retorne o tipo genérico passado na instanciação da classe (no caso acima, String)? A única coisa que consegui foi obter o valor T. Mas meu objetivo não é T, mas String. É possível obter ou isto não está disponível à reflexão?
não é possivel saber o tipo passado para uma classe (ja perdi bastante tempo tentando descobrir como
Paulo_Silveira
não da, essa informacao nao fica guardada em tempo de execucao. a nao ser que voce tenha uma filha que estende essa classe e explicita quem eh T.
Rodrigo_Manhaes
Obrigado pelas respostas, pessoal! Como o Paulo Silveira disse, a solução enviada pelo Juzpeleteiro só encontra o tipo declarado em código (no caso do exemplo que enviei, T). É útil quando se declara explicitamente o tipo, como List teste.
É, vou ter mesmo que recorrer à boa e velha anotação. Obrigado a todos.
sapulha
É isso aí, o Generics funciona muito bem, mais para tempo de compilação.
Ele não pode verificar este tipo de informação em tempo de execução, pois dessa forma você perderia a compatibilidade do Java 5 com as versões anteriores a implementação do Generics
T
thingol
Uma forma boba de conseguir isso é passar algum parâmetro que contenha um objeto do tipo Class.
Exemplo:
importjava.util.*;classMinhaLista<T>extendsArrayList<T>{privateClass<T>klass;publicMinhaLista(Class<T>klass){super();this.klass=klass;}publicClass<T>getElementClass(){returnklass;}publicstaticvoidmain(String[]args){List<String>lista=newMinhaLista<String>(String.class);lista.add("abacaxi");lista.add("banana");lista.add("caqui");// Suponha que você não saiba o tipo do elementoClass<?>klass=((MinhaLista)lista).getElementClass();System.out.println(klass);}}