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