Reutilizando objeto

4 respostas
T

Pessoal, tenho dúvidas quanto a re-utilizar um objeto, se quando eu crio um novo ele instancia mesmo um novo ou só redireciona o antigo.

Vou postar aqui meu código:

String[] classes = this.getManyParameter("NRO_INT_CLS");

for(int j=0;j<classes.length;j++){
    
    ClasseSis clsSis = new ClasseSis();
    SolicitacaoSistemaClasse solicitacaoSistemaClasse = new SolicitacaoSistemaClasse();
    clsSis = clsSisDAO.load(new Long(classes[j]),HibernateFilter.getClassicSession());
    
        (...)  // sets
        solicitacaoSistemaClasseDAO.save(solicitacaoSistemaClasse,HibernateFilter.getClassicSession());
    

    clsSis = null;
    solicitacaoSistemaClasse = null;
    
}

É necessário setar ele nulo e criar um novo, para depois fazer os sets e salvar, ou carregar com o DAO?
Fiz desse jeito pois fiquei desconfiado que sobrasse informação do vo antigo.

Obs: o código está funcionando corretamente, apenas quero tirar dúvidas para melhorá-lo.

4 Respostas

davidbuzatto

Não precisa setar nulo não. A cada iteração vc está criando uma nova referencia com o mesmo nome e atribuindo um nobo objeto. Seria legal vc declarar a referência fora do escopo do for. Não se preocupe muito com desalocação de memória… Para isso existe o coletor de lixo :smiley:

Quando se sai de um escopo mais interno, os objetos (se não estiverem sendo mais referenciados) e outras variáveis são destruídos.

Falow!

T

Valeu David, só não entendi o “declarar a referência fora do escopo do for”.

E outra coisa, se eu quisesse utilizar o mesmo objeto, mudando só um campo dele (das classes, no exemplo), tem como?
Tenho que gravar no banco registros iguais, só muda o campo da classe.

marcosbrandao

quando ele disse declarar a referencia for do escopo for, ele quis dizer que a linha onde voce faz a referencia do objeto deve ficar fora do laço “for”:

ClasseSis clsSis = null;
SolicitacaoSistemaClasse solicitacaoSistemaClasse = null;
for (int j=0;j<classes.length;j++) {
     clsSis = new ClasseSis();
     solicitacaoSistemaClasse = new SolicitacaoSistemaClasse();
     ...
}
ViniGodoy

davidbuzatto:
Seria legal vc declarar a referência fora do escopo do for. Não se preocupe muito com desalocação de memória… Para isso existe o coletor de lixo :smiley:

Quando se sai de um escopo mais interno, os objetos (se não estiverem sendo mais referenciados) e outras variáveis são destruídos.

Falow!

Pra que fazer isso? Vai até contra a dica que você mesmo deu…
E a história de otimização não cola, pq a VM já trata casos assim…

Criado 12 de abril de 2007
Ultima resposta 12 de abr. de 2007
Respostas 4
Participantes 4