Tratamento automático e genérico de listas utilizando Generics

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

bom

vc pode usar a API Reflection, descobrir o atributos do seu objeto( tanto VO, como PO)
e se eles seguirem o padrão java bean (o q vai facilitar)
chamar os respectivos getters/ setters

acho q assim tu consegue irmão