1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Composição em Reflection

Tenho duas classes Usuario e Endereco, e usuário possui um endereço. Queria saber se tem como eu pegar o objeto endereço via reflection de um usuario.

        Endereco endereco = new Endereco("rua das flores", 10, "9456-4568");
        endereco.setNumero(10);
        endereco.setTelefone("9456-4568");
        endereco.setRua("rua das flores");
        Usuario usuario = new Usuario();
        usuario.setId(1);
        usuario.setNome("nome");
        usuario.setIdade(50);
        usuario.setEndereco(endereco);

        Field[] campos = Usuario.class.getDeclaredFields();
        for (Field f : campos)
        {
            f.setAccessible(true);
            try
            {
                System.out.println(f.get(usuario));
            } catch (IllegalArgumentException | IllegalAccessException e)
            {
                e.printStackTrace();
            }
        }

Saída:

1
nome
50
main.Endereco@19efb05

Tentando mudar o for para exibir o conteudo do Usuario e do Endereco fica assim:

        for (Field f : campos)
        {
            f.setAccessible(true);
            try
            {
                try
                {
                    System.out.println(f.get(usuario));
                    Field[] a = f.get(usuario).getClass().getDeclaredFields();
                    for (Field field : a)
                    {
                        field.setAccessible(true);
                        System.out.println(field.get(endereco));
                    }
                } catch (Exception e)
                {
                    // TODO: handle exception
                }

            } catch (IllegalArgumentException e)
            {
                e.printStackTrace();
            }
        }

E a saída fica:

1                          ->id
-2147483648
2147483647
int
[C@a981ca
[C@8814e9
[C@1503a3
[I@1a1c887
nome                     ->nome
50                       ->idade
-2147483648
2147483647
int
[C@a981ca
[C@8814e9
[C@1503a3
[I@1a1c887
main.Endereco@1fae3c6        -> "referencia a endereço"
rua das flores               ->finalmente imprime o endereco
10                           ->numero
9456-4568                    ->telefone

Imprime o que deveria ser impresso, mas é impresso muita coisa "errada".

Alguém, tem alguma ideia de como pegar os valores dos atributos de Usuario e da classe da composicao(Endereco)?

Grato desde já

  • No caso vc teria q usar o objeto usuario e a partir dele vai da certo. Não vou fazer agora pq tô de saida, mas amanhã dá certo :D

    João Paulo Cardoso   23 de jun de 2014
  • Só um pergunta: vc acha q vale a pena fazer isso? Num da pra usar os métodos getters não?

    João Paulo Cardoso   23 de jun de 2014
  • Get n resolveria,é q estou trabalhando com generics tbm

    Felipe P.   23 de jun de 2014
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java reflections ou faça a sua própria pergunta.