Bom estou precisando verificar se houve algum tipo de alteração em 1 objeto…
Por ex: Eu Tenho um Mini Cadastro e após ele salvar outros campos são liberados para conclusão, e com isso o cadastro feito anteriormente pode sofrer alterações
mas quando eu vou finalizar tudo esse orçamento eu tenho q fazer essa verificação, se houve alteração… e tá triste pq nada q eu tento da certo…
Ele só iria igualar os objetos nesse momento mas, aparentemente eles sempre estão iguais, caso eu faça alguma mudança em p, p1 também sofre a mudança…
Alguem tem alguma ideia q possa me ajudar como resolver isso???
Cara oque você está fazendo é apenas atribuir a referencia de um objeto a uma variavel.
Ambas as variaveis p e p1 apontam para o mesmo objeto. Para fazer oque você está querendo você tem que instanciar um novo objeto e copiar os valores.
colored
Tipo…
p1.setNome(p.getNome);
???
Mas tipo n tem algum modo de eu verificar se 1 objeto foi alterado???
luciano2
Se seu negocio depende dessa verificação, é legal que você crie um flag de atualização no objeto, e caso em algum ponto o objeto for atualizado o flag deve ser setado para true e na hora que você for reutilizar você checa o flag.
colored
Sim essa seria a ideia simples… eh que tipo eu to reorganizando um projeto… e no codigo q o cara fez… uma classe com uns 30 atributos ele guardou todos em variaveis e depois comparou uma por uma…
Isso fica Horrivel… por isso eu queria algo mais interessante, e fora q isso eh usado sempre…
o cara fez isso mesmo q vc disse nessa classe, mas convenhamos que pra esse caso fica muito ruim concorda…
eberson_oliveira
Olá,
Já pensou na possibilidade de implementar um Observer? Talvez você consiga resolver com esse padrão.
[]s
Éberson
luciano2
E se implementar o observer não se esqueça de postar a solução porque eu já tentei fazer isso em um projeto mas no final não deu tempo.
B
BrunoCarlo
Ola,
Para isto tem o PropertyChangeListener, com o PropertyChangeSupport… que server pra isto… ou mesmo o Observer, como foi citado pelo colega acima.
_fs
Não tem solução elegante pra esse problema.
Você pode fazer um pouco de mágica com Reflection, inicializando uma coleção com os valores antigos e em determinado momento comparar com o estado atual do objeto.
Ou se quiser uma solução que deixa tudo transparente, mas com mágica em excesso, use AspectJ.
Alguem pode me Ajudar :X?
Ou sei lá me mostrar um exeplo 1 pk mais simples d observer pq n consegui entende-lo…
Obrigado a todos que ja deram uma força ;D
pmlm
Pessoap=newPessoa();p.setNome("Jefferson");Pessoap1=(Pessoa)p.clone();p1.setNome("Astolfo");if(p1.equals(p)){//Equals e não ==System.out.println("Eh Igual");}else{System.out.println("Eh Diferente");}
publicclassPessoaimplementsCloneable{privateintid;privateStringnome;publicObjectclone()throwsCloneNotSupportedException{returnsuper.clone();}publicbooleanequals(Objectother){if(other==null){//O outro ojecto é nullreturnfalse;}if(!otherinstnaceofPessoa){//O outro objecto não é uma Pessoareturnfalse;}Pessoap2=(Pessoa)other;if(this.id!=p2.id||!this.nome.equals(p2.nome)){//O outro objecto tem id ou nome diferentereturnfalse;}returntrue;}}
colored
Entendi pmlm …
Mas o problema está que estou procurando uma solução justamente para não ter q ficar comparando atributo a atributo… pq tenho algumas classes com muitos…
O otro cara aki até implementou dessa forma, mas eu acho q eh muito estranho… por isso achei q houvesse algo pra verificar o objeto por completo e nao campo a campo
pmlm
Verificar o “objecto completo” não é possível uma vez que o que define o objecto são os seus atributos. Podes, como também penso que já foi sugerido, adicionar uma flag à tua classe pessoa, que alteres quando o objecto for alterado.