Estou usando a Classe ArrayList para guardar alguns objetos de uma classe chamada Plant, que eu criei. Tenho um objeto dessa classe declarado como pl que é modificada constantemente. por isso ante de uma modificação eu o salvo na lista. Acontece que sempre que que eu uso o método add(pl) de ArrayList
todos os registros guardados até então são substituidos pela última inserção…
Por exemplo… se eu tenho uma lista vazia, insiro nela o objeto da classe Plant p1, depois modifico o objeto pl e tento o adicionar na lista, ele á adicionado, e todos os elementos anteriores torna-se iguais a este ultimo elemento inserido e assim por diante.
Garanto que não há erro de lógica das inserções e nem tenho nenhum laço que possa estar causando isso;
Será que há algo errado com a classe que eu fiz;
Alquem sabe me dizer o que pode estar acontecendo??
8O
Não entendi direito o que tu quer fazer.
Tu quer ir adicionando no arrayList varios Plant, mas
um diferento do outro, tipo, o pl1 é diferente do proximo?
Se tu quer isso, adicionar inumeros itens de um mesmo tipo(objeto),
tu tens que fazer mais ou menos assim:
exemplo
intx=10;Planta=null;Arraylisstaux=newArrayList();for(int i =0; i<x; i++){a=newPlant();a.set();a.get();
.
.
.
aux.add(a);
Tu ta fazendo mais ou menos isso?
R
renan_danielPJ
Isso ocorre pq, vc está usando uma única instância de Plant.
O ArrayList quando executa o Add(); insere referencias de objeto.
Entao como vc tem uma unica instancia ele insere na boa, mas a partir do momento que vc alterar um objeto Plant o arraylist irá alterar as referencias tb.
Acho que é esse o seu problema.
Uma solução: Ter um laco que a cada iteração cria um novo objeto Plant, e adicioná-lo a lista. Depois vc anula o objeto.
Abraços,
R
renan_danielPJ
Isso ocorre pq, vc está usando uma única instância de Plant.
O ArrayList quando executa o Add(); insere referencias de objeto.
Entao como vc tem uma unica instancia ele insere na boa, mas a partir do momento que vc alterar um objeto Plant o arraylist irá alterar as referencias tb.
Acho que é esse o seu problema.
Uma solução: Ter um laco que a cada iteração cria um novo objeto Plant, e adicioná-lo a lista. Depois vc anula o objeto.
Abraços,
A
andersonraPJ
acho q é exatamente isso q o Renan falou:
O ArrayList guarda uma referência ao objeto, q é o mesmo q vc está alterando.
Então vc terá q criar uma nova instância do seu obj cada vez q vc quiser adiciona-lo à lista.