Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Percorrer uma lista

Como posso percorrer uma lista com reflection? Consigo validar que meu campo é do tipo ArrayList e agora gostaria de acessar os objetos que estão cadastrados nessa lista.

Alguma ideia? A duvida está somente em como percorrer os itens da lista.

4 respostas

Olá Raphael!

Poderia postar um exemplo de como está seu código?

Opa, Gesley. Beleza? Consegue enxergar alguma luz no fim desse túnel? rs

Poderia postar um exemplo de como está seu código?

solução!

Consegui resolver. O código abaixo é uma evolução do exercício de imprimir um XML. A evolução trata-se de verificar se existe um objeto IS-A List e fazer a criação do mesmo de forma recursiva.

O algorítimo ficou da seguinte forma:

public class XmlGenerator {

    public static String toXML(Object object) throws Exception{
        StringBuilder builder = new StringBuilder();
        Class<?> clazz = object.getClass();
        Field[] fields = clazz.getDeclaredFields();

        builder.append("<" + clazz.getSimpleName().toLowerCase() + "> \n");

        for(Field field : fields){
            field.setAccessible(true);
            if(List.class.isAssignableFrom(field.get(object).getClass())){
                builder.append("<" + field.getName() + "> \n");
                for(Object obj : ((Collection<Object>)field.get(object))){
                    builder.append(toXML(obj));
                }
                builder.append("</" + field.getName() + "> \n");
                break;
            }
            builder.append("<" + field.getName() + ">");
            builder.append(field.get(object));
            builder.append("</" + field.getName() + "> \n");
        }

        builder.append("</" + clazz.getSimpleName().toLowerCase() + ">\n");

        return builder.toString();
    }
}

O ponto relacionado à dúvida inicial deste post foi resolvida com o código abaixo:

for(Object obj : ((Collection<Object>)field.get(object)))

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software