Caros, recetemente precisei converter uma lista de um objeto VO em uma lista de objeto POJO, dai vi que o processo era semelhante para uma pá de listas que temos nos sistema e pensei em criar um método genérico com um converso e várias sobrecargas para lidar com cada uma das possibilidades de lista.
O código está abaixo, mas antes que vocês vejam quero fazer logo a pergunta, como é que eu faço isso? Tem jeito? Claro que tem que ser uma solução viável do ponto de vista da performance. Está ai o desafio!
No meu exemplo ou eu esbarro na generalização e a possibilidade de ClassCastException e listas com vários objetos ou eu esbarro na desgeneralização o que implica fazer um método para cada tipo de lista que quero converter. Bom, basicamente o mais longe que eu cheguei até agora foi o seguinte código:
[code]package testesComGenerics;
import java.util.ArrayList;
import java.util.List;
public class TestesComGenerics {
public static void main(String[] args) {
ObjetoVO objetoVO1 = new ObjetoVO();
ObjetoVO objetoVO2 = new ObjetoVO();
ObjetoVO objetoVO3 = new ObjetoVO();
objetoVO1.nome = "Objeto1";
objetoVO2.nome = "Objeto2";
objetoVO3.nome = "Objeto3";
ObjetoVO2 objetoVOa = new ObjetoVO2();
ObjetoVO2 objetoVOb = new ObjetoVO2();
ObjetoVO2 objetoVOc = new ObjetoVO2();
objetoVOa.numero = 1;
objetoVOb.numero = 2;
objetoVOc.numero = 3;
List<ObjetoVO> listaVO = new ArrayList<ObjetoVO>();
List<ObjetoVO2> listaVO2 = new ArrayList<ObjetoVO2>();
listaVO.add(objetoVO1);
listaVO.add(objetoVO2);
listaVO.add(objetoVO3);
listaVO2.add(objetoVOa);
listaVO2.add(objetoVOb);
listaVO2.add(objetoVOc);
List<ObjetoPOJO> listaPOJO = retornaLista(new ArrayList<ObjetoPOJO>(), listaVO);
List<ObjetoPOJO2> listaPOJO2 = retornaLista(new ArrayList<ObjetoPOJO2>(), listaVO2);//Aqui falha!!!
for (ObjetoPOJO objetoPOJO : listaPOJO) {
System.out.println(objetoPOJO.nome);
}
for (ObjetoPOJO2 objetoPOJO2 : listaPOJO2) {
System.out.println(objetoPOJO2.numero);
}
}
@SuppressWarnings("unchecked")
static <T extends ObjetoPOJO , K extends ObjetoVO> List<T> retornaLista(List<T> listaPOJO, List<K> listaVO){
//Aqui eu tive que extender para garantir que a minha lista só teria um mesmo tipo de objeto
for(K o: listaVO){
listaPOJO.add((T) converterVOtoPOJO(o));
}
return listaPOJO;
}
static ObjetoPOJO converterVOtoPOJO(ObjetoVO objetoVO){
ObjetoPOJO objetoPOJO = new ObjetoPOJO();
objetoPOJO.nome = objetoVO.nome;
return objetoPOJO;
}
static ObjetoPOJO2 converterVOtoPOJO(ObjetoVO2 objetoVO2){
ObjetoPOJO2 objetoPOJO2 = new ObjetoPOJO2();
objetoPOJO2.numero = objetoVO2.numero;
return objetoPOJO2;
}
}
class ObjetoVO {
String nome;
}
class ObjetoPOJO {
String nome;
}
class ObjetoVO2 {
int numero;
}
class ObjetoPOJO2 {
int numero;
}[/code]
Thx,
PH