Valor de um atributo de uma classe em outro atributo

Tenho o seguinte código

long protocolo=solicitacao.getProtocolo();
solicitacao = new Solicitacao();
solicitacao.setProtocolo(protocolo);

Na primeira linha atribuo o valor que esta no objeto ao atributo do tipo “long”;
Quando dou um new Solicitacao() automaticamente o objeto é “limpado” e consequentemente o atributo protocolo tbm é “limpado”.
Porém na terceira linha preciso novamente usar o protocolo com seu valor original antes de dar um new Solicitacao;

Como faço para manter o valor do long protocolo para que possa usá-lo depois?

simples: cria um objeto auxiliar de solicitacao antes de tudo.

Solicitacao soliAux = solicitacao;

faz o que tem que fazer e por fim: solicitacao = soliAux;

Olá jonatex,

posso estar enganado, mas acho q seu problema é relação ao escopo destes atributos protocolos, estou correto??

Uma vez que você tenha um protocolo como um atributo da classe Solicitacao, toda vez que você fizer um new da mesma, esse valor vai pra o seu valor default (0, por exemplo)…

Contudo, o valor dessa variável local long protocolo, mantém o valor recém-atribuído pelo escopo da mesma… Veja uma imagem do debug q fiz rapidinho pra tentar auxiliá-lo…

Espero ter ajudado.

Att.
Fernando Antonio Barbeiro campos


[quote=jonatex]Tenho o seguinte código

long protocolo=solicitacao.getProtocolo();
solicitacao = new Solicitacao();
solicitacao.setProtocolo(protocolo);

Na primeira linha atribuo o valor que esta no objeto ao atributo do tipo “long”;
Quando dou um new Solicitacao() automaticamente o objeto é “limpado” e consequentemente o atributo protocolo tbm é “limpado”.
Porém na terceira linha preciso novamente usar o protocolo com seu valor original antes de dar um new Solicitacao;

Como faço para manter o valor do long protocolo para que possa usá-lo depois?[/quote]

Olá, jonatex!

A segunda linha não modifica em nada o atributo protocolo, ele vai continuar com o valor que getProtocolo() passou para ele.

Para comprovar isso faça o seguinte teste:

long protocolo=solicitacao.getProtocolo();
System.out.println("Valor de protocolo antes do new: "+protocolo);
solicitacao = new Solicitacao();
System.out.println("Valor de protocolo depois do new: "+protocolo);
solicitacao.setProtocolo(protocolo);

E veja o que será impresso nos dois momentos.

Abraço!

Concordo com o Vingdel pois a variavel que recebe o protocolo nao esta sendo zerada e nem nula.
mesmo você atribuindo um new solicitacao ela nao altera o valor da variavel! pos você esta atribuindo um new no objeto solicitação e a variavel não faz parte deste objeto.

Só que quando atribuo long x =1; o hibernate persiste no banco, porém quando atribuo o getProtocolo em e dou um new Solicitacao, ele não persiste no banco!