Pessoal,
To com uma dúvida brava aqui, hehehe.
Eu tenho uma classe e nessa classe eu tenho o atributo private List<Pessoa> pessoas
por exemplo.
Usando reflection, eu consigo percorrer os métodos e pegar o getPessoas().
Bem, minha dúvida é, através de reflection, eu consigo ver que o tipo de retorno do getPessoas() é um java.util.List,
mas como eu faço pra saber se essa lista é realmente de "“Pessoa”? pq na minha classe vão ter mais de uma lista.
Preciso disso pq estou criando uma classe Util onde várias classes irão usar. Eu só tenho o class do objeto que popula a lista, não terei nem o nome do atribuito.
Minha idéia é percorrer os métodos get e verificar qual q possui um retorno do tipo java.util.List e que seja da classe que eu quero.
Abraços
package guj;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
class Pessoa {
}
class Carro {
}
class Aviao {
}
class ClasseComVariosMetodos {
public List<Pessoa> getPessoas() {
return new ArrayList<Pessoa>();
}
public List<Carro> getCarros() {
return new ArrayList<Carro>();
}
public LinkedList<Aviao> getAvioes() {
return new LinkedList<Aviao>();
}
public String getNome() {
return "ClasseComVariosMetodos";
}
}
public class TesteReflectionGenerics {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
Class<?> klass = ClasseComVariosMetodos.class;
// Imprime:
// java.util.List<guj.Pessoa>
// java.util.List<guj.Carro>
// java.util.LinkedList<guj.Aviao>
// class java.lang.String
for (Method method : klass.getDeclaredMethods()) {
System.out.println(method.getGenericReturnType());
}
System.out.println();
// Imprime:
// class guj.Pessoa
// class guj.Carro
// class guj.Aviao
for (Method method : klass.getDeclaredMethods()) {
if (List.class.isAssignableFrom(method.getReturnType())) {
Type[] typeArguments = ((ParameterizedType) method.getGenericReturnType()).getActualTypeArguments();
System.out.println(typeArguments[0]);
}
}
}
}
Era isso mesmo que eu estava precisando.
vlwww entanglement