Pessoal, estou tentando invocar métodos via reflection, consegui fazer, sem problemas, mas fui tentar faz aquele “Algo a mais” e não consegui, preciso da ajuda de vocês,
O problema é o seguinte:
tenho a classe Cliente, dentro dela tenho uma lista de Animal e dentro de cada Animal tenho uma lista de Atendimento;
[code] List<String> methodsToInvoke = new ArrayList<String>();
methodsToInvoke.add(“getAnimais”);
methodsToInvoke.add(“getAnimais().getAtendimentos()”); // ESTA LINHA NÃO FUNCIONA
Nesse caso a ideia vai um pouco mais além de chamada recursiva porque teremos uma iteração no meio (iterar em todos os elementos de getAnimais e chamar o getAgendamentos.
A sua necessidade é de usar o método Hibernate.initialize em tudo isso aí?
O Hibernate.initialize não faz a iteração, então você precisa fazer tudo na mão. Eu vi um tópico no stackoverflow onde o cara tem uma necessidade parecida:
Você tem tantos cenários de uso dessa inicialização que fazem necessário um método genérico pra isso? Porque isso pode te dar um trabalhinho.
Ou você pode fazer no seu metodo recursivo tratar listas neste caso ficaria alguma coisa assim:
public void callMethod(String nameMethod, Object instance ) {
if (instance instanceOf List) {
List myLIst = (List) instance;
for(Object objet : myList ) {
callMethod(String nameMethod, objet ) {
}
} else {
//Suponhamos que a variavel metodo chegou com esse valor nameMethod = getMethodOne().getMethodTwo()
if (nameMethod.split["\\."].length() > 1) {
//chamar o getMetodoOne em "instance"
//Recuperar o retorno
callMethod(nameMethod.split["\\."][1], instanciaRetornadaEmGetMethodOne);
} else {
//chama o metodo na instancia
}
}
}
Cara pra você fazer isso vai dar um pouco de trabalho, mas será diverdito fazer isso
Agora estou na correria mas, mais tarde posso te ajudar a desenvolver esse metodo!