Não há nada mais trabalhoso do que copiar os dados de um bean ao outro, sendo que estes tem os mesmos nomes nas propriedades...
Por exemplo:
@Entity
@Table(name="CLIENTE")
public class Cliente {
       private String nome;
       private String endereco;
       ...
}
@WebForm
public class ClienteForm {
       private String nome;
       private String endereco;
       ...
}
Se as classes tiverem uns 100 campos, eu precisaria obter e colocar os dados, um por um (ou seja, fazer get e set de todos os campos...), 100 vezes!
Ai, as pessoas perguntam/respondem (dependendo do entendimento): "Não é para isso que serve o estagiário?"
Ai, eu respondo: "Não, não é para isso que serve o estagiário!" :P
Sei que é muito mais rápido na execução de um programa se não usarmos reflexão (eu já falei disso? Se não falei, seria um ótimo assunto para um próximo post :) ) mas, neste caso, acho muito mais fácil utilizá-la do que fazer um monte de get e set (sei lá, dependendo do caso, o código fica até mais bonito...).
Bem, já escrevi demais, vamos ao código:
public class ObjectUtil {
//Método que copia os campos de um objeto a outro.
public static void copyFields(Object from, Object to) {
        //Obtenho os campos que estão declarados no objeto de origem
        Field fields[] = from.getClass().getDeclaredFields();
        for (Field fromField: fields) {
                try {
                      //Obtenho o campo do objeto de destino que possue o mesmo nome do campo do objeto de origem
                      Field toField = to.getClass().getDeclaredField(fromField.getName());
                     //Modifico a acessibilidade...
                      toField.setAccessible(true);
                      fromField.setAccessible(true);
                      //Obtenho o valor do campo do objeto de origem
                      Object value = fromField.get(from);
                       //Coloco o valor no campo do objeto de destino
                       toField.set(to, value);
                } catch (Exception e) {
                       //Se der erro, não copio e passo para o próximo campo 
                }
        }
}
}
Hum... Será que isso funciona bem?
Até mais!
Um comentário:
Existem algumas libs para isso: http://stackoverflow.com/a/1432956
Postar um comentário