Como saber o tipo antes de invocar o método? (Usando Reflexao)

3 respostas
bland

Olá pessoal!

Estou com um probleminha. Pode até nem ser mais um probleminha para muitos de vocês, como pode ser um problemão para outros.

Seguinte, estou desenvolvendo um método genérico o suficiente para preencher qualquer tipo de objeto a partir de um ResultSet usando Reflexão.

Porém, me surgiu um problema. O objeto a ser preenchido pode ter outros objetos dentro dele.

Ex.

public class Pessoa { ... private Endereco endereco; ... }

Estou buscando o nome do campo no ResultSet (o nome do campo e o nome das colunas são iguais) e estou “invocando” o método correspondente a cada campo. Até então funciona. Mas quando eu tenho um campo de um outro tipo de objeto (como mostrado no exemplo) está dando erro.

Pensei de criar um Map e pedir que fosse informado o caminho correto de cada coluna do ResultSet, mas não sei se seria a forma mais correta.

Ex. ... lMap.put( "endereco.rua.nome", "END_NOME_RUA" ); // 1º - Caminho do campo a ser preenchido // 2º - Coluna do banco de dados correspondente ...

Bem, queria saber de vocês qual seria a melhor forma de implementar essa minha solução. Se alguém já o fez, agradeceria se demonstrasse a forma como conseguiu solucionar esse probleminha.

Abraço a todos e muito obrigado pela ajuda.

3 Respostas

A

Faça o alias do campo vir com “.”, ou outro caractere que você escolher, dê um split e vá alimentando a árvore!

akumaldo

como fazer??

A

seu select:

select nome as "nome", 
       rua as "endereco.rua",
       ddd as "telefone.ddd"
from ...
where ...

E o seu código

Object objeto = [objeto que você está setando];

String[] objetos = nomeCampo.split("\\.");

for (int i = 0; i < objetos.length - 1; i++){
    objeto = ... resultado do método referente a "get" + objetos[i] e retornar o objeto
}

<setar o valor utilizando reflection com "set" + objetos[objetos.length - 1], passando o valor que veio no ResultSet para objeto>

Espero que você consiga entender.

Falou,

Armando

Criado 14 de julho de 2006
Ultima resposta 15 de jul. de 2006
Respostas 3
Participantes 3