Converter Class para outra classe

5 respostas
rodrigodsw2005

Alguém sabe se tem como fazer cast uma classe Class em outra classe.??

Por exemplo;;

Class c = Produto.class . . //codigo para preenche os metodos set . .

pegar o objeto “c” e converter novamente a Produto com tudo dentro…

Alguem ajuda??

Att

5 Respostas

Marky.Vasconcelos

Como asssim “com tudo dentro”?

Voce nao vai ter o estado anterior do objeto dessa forma.

Se sua duvida é ter o objeto voce pode usar o newInstance da Class que invoca o construtor sem argumentos da classe.

Class<Produto> c = Produto.class;
Produto p = c.newInstance();

Caso tenha parametros voce pode usar o Class.getConstructor passando os Class do tipo dos argumentos depois invocalo com algum valor.
Algo como:

Class<Produto> c = Produto.class;
Constructor ct = c.getConstructor(String.class, Double.class);//Supondo que tenha um construtor como Produto(String nome, double valor)
Produto p = ct.newInstance("Produto A", 1500.15);
rodrigodsw2005

Mark_Ameba ,

A questao é o seguinte… estou fazendo um componente de persistencia de banco de dados… Quando eu disse que preencho os metodos SET, estava me referindo ao código de pegar os dados do banco e colocar nos metodos SET… assim terei o objeto “produto” preenchido com os dados do banco. Logo depois, minha ideia é retornar a classe Produto dentro de um ArrayList para quem usar meu componente puder manipular… entendeu?? Só está faltando eu converter para Produto novamente… o resto eu ja fiz…

T++

Marky.Vasconcelos

Voce não consegue ter os objetos com os valores preenchidos diretamente do Class se é isso que pretende fazer.

Mas se quiser saber como setar os valores via Reflection posso te ajudar.

rodrigodsw2005
Method[] m = classe.getMethods();

                            if (m[j].getName().equalsIgnoreCase("set" + meta.getColumnLabel(i + 1))) {

                            Object[] parametros = {rs.getObject(meta.getColumnLabel(i + 1)).toString()};
                            m[j].invoke(objeto, parametros);

Perceba que "classe" é do tipo "Produto";
Veja que na ultima linha eu coloco os dados do banco, nos sets;

Agora eu posso retorna "classe" em um arraylist, correto... só que quando eu uso iterator e faço o cast para "Produto" dá esse erro:
Class cannot be cast to projeto.rodrigo.projetopersistenca.Produto

Eu nao sei como que faço para retornar "Produto" novamente....

Obg

Marky.Vasconcelos

Voce nao pode retornar os objetos Class. Eles representam sua classe mas não desse modo que voce quer usar.

Essa variavel objeto que é o objeto que deve estar no List.

Poste esse código completo.

Criado 16 de julho de 2009
Ultima resposta 16 de jul. de 2009
Respostas 5
Participantes 2