JAVA - Dificuldade com Lista de Objetos

4 respostas
A

Pessoal,
Bom dia.

Eu tenho na aplicação uma lista de objetos “ReportDiarioTrabalho”.

Em um certo momento eu preciso carregar um objeto do tipo “ReportDiarioTrabalho” com a primeira ocorrência dessa lista e alterar algumas informações desse objeto.
O problema é que, quando eu altero o objeto, a primeira posição da lista também altera e vice-versa.
Sei que estou fazendo errado, pois assim crio um ponteiro para a lista… mas não sei como fazer isso para que possa alterar eles independentes.

ReportDiarioTrabalho tmp = lista.get(0); // gravo em um objeto temporario a primeira linha 

tmp.setSaldo(0.0); // ao fazer isso a lista.get(0) do campo saldo tb altera

4 Respostas

M

Você precisa criar uma nova instância de ReporDiarioTrabalho, usando o new. E faz essa instância receber o valor da lista, desse modo o valor da variável esta em uma posição diferente das instâncias da lista

A

Oi Matheus,
Não funcionou. Veja se está certo, pois fiz assim:

System.out.println("1: " + lista.get(0).getCodigo_reqsv());
	System.out.println("2: " + lista.get(0).getSaldo());

	ReportDiarioTrabalho tmp = new ReportDiarioTrabalho();
	tmp = lista.get(0); 
	tmp.setSaldo(0.0);
	
	System.out.println("1: " + lista.get(0).getCodigo_reqsv());
	System.out.println("2: " + lista.get(0).getSaldo());
		
	System.out.println("saldo: "+ tmp.getSaldo());

1: 862272
2: 18.0
1: 862272
2: 0.0
saldo: 0.0

M

Quando você coloca o = você está atribuindo a instância do objeto.
Se você fizer um print na variavel tmp terá um valor, quando você atribui esse valor ao da lista, esse valor irá alterar e ficará igual a da entidade da lista.
Para adquirir somente os valores dos atributos em uma outra instância, pode ser feitor de duas formas:

  1. Criar um contrutor no ReportDiarioTrabalho que receba como parametro a entidade ReportDiarioTrabalho/ou passar os atributos como paramêtro.

  2. Você pode setar os atributos manualmente pelos setters.

A

Perfeito Matheus. Usei a primeira opção e passei para o construtor.
Funcionou!
Muito obrigado!

Criado 31 de janeiro de 2020
Ultima resposta 31 de jan. de 2020
Respostas 4
Participantes 2