Criar Metodo clone() Generico  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
colored
GUJ Ranger
[Avatar]

Membro desde: 07/06/2007 12:27:41
Mensagens: 864
Localização: SP
Offline

Bom to querendo criar um metodo clone() so q generico.. pq pelo jeito vo precisar utilizar em varios lugares..
e n keria ter q colocar em cada POJO esse metodo..
Já queria tratar em lugar soh.. exception, casting.. enfim...

Tentei mas pra variar neh n deu certo kkk...


Criei essa Classe q vai ser de onde vou chamar...


pra poder criar assim mais o menos



Mas eu Estou achando que o problema está na hora d dar o super
mas eu n tenho ideia d como fazer isso funcionar..


ai Gera esse Erro



Será q Alguem pode Me Ajudar to perdidao..
MUito Obrigado

This message was edited 1 time. Last update was at 13/05/2010 11:29:47


Caelum - FJ 11, 21, 26, 27, 31, 57 =D
Developer of Something.
Marck
Virtual Machine Man
[Avatar]

Membro desde: 15/08/2006 16:15:11
Mensagens: 598
Offline

Olá,

Cara, fiz algumas alterações aqui e até funcionou. Funcionou para clonar a class Clone. Porem, o objeto que tem dentro dela, o Pessoa, nao clona.



Dei uma olhada na net e tem algo como DeepCopy.
Outra alternativa poderia ser fazer com Reflection.

att,

"A vida me deu tudo que eu pedi. Agora se o que eu pedi foi pouco, ai o problema já é meu!". Sartre

Besteiras sobre programação

http://toobject.wordpress.com/
DataModelDinamic
[Email] [WWW] [MSN]
colored
GUJ Ranger
[Avatar]

Membro desde: 07/06/2007 12:27:41
Mensagens: 864
Localização: SP
Offline

Então ai q tá neh.. o problema acho q tá no super
ele executa na classe q ele tá..

This message was edited 2 times. Last update was at 13/05/2010 12:29:32


Caelum - FJ 11, 21, 26, 27, 31, 57 =D
Developer of Something.
Marck
Virtual Machine Man
[Avatar]

Membro desde: 15/08/2006 16:15:11
Mensagens: 598
Offline


Não é isso. O sem o super entraria em loop.
O problema ai é que Clone<T> que é clonavel, e não o seu objeto.

Pesquisei e achei uma alternativa. Funcionou:



...porém seu objeto tem que ser Serializavel.

Artigo completo -> http://www.javaworld.com/javaworld/javatips/jw-javatip76.html?page=2

This message was edited 1 time. Last update was at 13/05/2010 12:42:00


"A vida me deu tudo que eu pedi. Agora se o que eu pedi foi pouco, ai o problema já é meu!". Sartre

Besteiras sobre programação

http://toobject.wordpress.com/
DataModelDinamic
[Email] [WWW] [MSN]
colored
GUJ Ranger
[Avatar]

Membro desde: 07/06/2007 12:27:41
Mensagens: 864
Localização: SP
Offline

Eu Antes de implementar uma solução na parte de um dao generico consegui escapar d por serializable nas classes...
o qto isso pode me prejudicar no meio do projeto caso eu coloke isso nos POJO's?????


Caelum - FJ 11, 21, 26, 27, 31, 57 =D
Developer of Something.
Marck
Virtual Machine Man
[Avatar]

Membro desde: 15/08/2006 16:15:11
Mensagens: 598
Offline

Então cara, eu não vejo problema em ter herança com Serializable, ainda mais que trata-se de uma Interface marcadora, ou seja, voce não vai perder usando o extends.
Mas já que voce quer fugir disso, a ultima opção que consigo imaginar é fazer o clone com Reflection.

Este exemplo eu não testei, mas dá uma olhada:

http://www.stupidjavatricks.com/?p=26

"A vida me deu tudo que eu pedi. Agora se o que eu pedi foi pouco, ai o problema já é meu!". Sartre

Besteiras sobre programação

http://toobject.wordpress.com/
DataModelDinamic
[Email] [WWW] [MSN]
Marck
Virtual Machine Man
[Avatar]

Membro desde: 15/08/2006 16:15:11
Mensagens: 598
Offline

OPá!!!
Testei e funcionou!


"A vida me deu tudo que eu pedi. Agora se o que eu pedi foi pouco, ai o problema já é meu!". Sartre

Besteiras sobre programação

http://toobject.wordpress.com/
DataModelDinamic
[Email] [WWW] [MSN]
colored
GUJ Ranger
[Avatar]

Membro desde: 07/06/2007 12:27:41
Mensagens: 864
Localização: SP
Offline

kkkkkkkkkkkk... Boa..
Então pq eu achei um topico no Guj... de um cara q tava fazendo com ObjectOutputStream
e talz parecido com akele exemplo q vc me mando...
e tava recriminando talz e utilizava muita memoria com perigo de estourar sei lá...

Mas vc acha q esse com Reflection eh melhor??

Caelum - FJ 11, 21, 26, 27, 31, 57 =D
Developer of Something.
colored
GUJ Ranger
[Avatar]

Membro desde: 07/06/2007 12:27:41
Mensagens: 864
Localização: SP
Offline

valeo acho q ja da pra começar será q com reflection tem como eu pegar as variaveis de instancias do objeto e clonar tb no mesmo metodo???

This message was edited 1 time. Last update was at 13/05/2010 13:27:37


Caelum - FJ 11, 21, 26, 27, 31, 57 =D
Developer of Something.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Acho melhor você adicionar um método em cada POJO. Se seus pojos tiverem um ancestral comum (e não forem tão pojos assim), você poderia colocar o clone lá também.

Afinal, o método é simples assim:



Não precisa lançar a exception, já que seu objeto efetivamente é clonável.

E já faz quem programa parar para pensar se só isso é suficiente. Lembre-se que pode ser necessário fazer deep copy de objetos relacionados, e que nada impede que objetos tenham referências circulares.

Geralmente é uma má idéia tratar clonagem ou serialização de maneira genérica e despreocupada no sistema.

This message was edited 1 time. Last update was at 13/05/2010 13:33:01


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
colored
GUJ Ranger
[Avatar]

Membro desde: 07/06/2007 12:27:41
Mensagens: 864
Localização: SP
Offline

ViniGodoy...
Mas mesmo assim tenho q dar um throws no metodo neh...
esse era um detalhe q eu queria evitar...

Tipo Gostaria de tratar tudo isso em 1 lugar soh.. neh..

Caelum - FJ 11, 21, 26, 27, 31, 57 =D
Developer of Something.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Não, não tem que dar throws no método.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Como vc vai tratar em um lugar só, se cada objeto é diferente?

Você pode mesmo usar reflexão, mas ela insere outros problemas:
1. Os erros de reflexão ocorrem em Runtime;
2. Ela não pensará se a cópia que está fazendo faz sentido ou não;
3. Você deverá tratar manualmente casos de referências circulares;

Ainda acho melhor escrever 3 linhas a mais por POJO (nem é muita coisa), e manter seu programa seguro na compilação e uma obrigação do seu programador pensar no que está fazendo.

A única coisa chata é que realmente você ainda precisará fazer "implements Cloneable" no topo da sua classe.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
colored
GUJ Ranger
[Avatar]

Membro desde: 07/06/2007 12:27:41
Mensagens: 864
Localização: SP
Offline

ueh então to fazendo algo de errado...



Por exemplo... ele marca o super.clone com "Unhandled exception type CloneNotSupportedException"

Caelum - FJ 11, 21, 26, 27, 31, 57 =D
Developer of Something.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

É verdade, vc terá que fazer um try catch.



Ainda é melhor que o throws, pois aí quem usa a classe poderá fazer:

Usuario u2 = u1.clone();

Sem ter que capturar exception alguma.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team