Java, problem z ArrayList i serializacją

Odpowiedz Nowy wątek
2011-07-26 08:23
0

Hej! Mam pewien problem, może to nie jest skomplikowane ale... Tworze kolekcję ArrayList własnych klas... i jak dodaje kolejny element to wszystkie poprzednie są takie same co ostatnio dodane np.

 
package mojpakiet;
import java.io.*;
 
public class MojeDane implements Serializable {
 
  private static final long serialVersionUID = 1L;
  public String Tekst = null;
  public int Zmienna1 = 0;
  public int Zmienna2 = 0;
 
}
 
.................
 
W projekcie 
    public mojpakiet.MojeDane dane = new mojpakiet.MojeDane();
    public ArrayList <mojpakiet.MojeDane>MojaListaDanych= new ArrayList<mojpakiet.MojeDane>();
...
dane.Tekst = "tekst1";
dane.Zmienna1=100;
dane.Zmienna2=200;
MojaListaDanych.add(dane);
// gdzies dalej... w kodzie
dane.Tekst = "tekst2";
dane.Zmienna1=111100;
dane.Zmienna2=2012120;
MojaListaDanych.add(dane);

Niestety pierwszy element ma wartość drugiego, tak jakby się nadpisywał...... :/

A może powinno się napisać klasę i wywoływać z konstruktorem itp.
coś np jak tutaj : http://wazniak.mimuw.edu.pl/index.php?title=PO_Serializacja
lub http://pl.wikipedia.org/wiki/Serializacja

W C# Troszkę inaczej to robiłem, a tutaj to do końca sam nie wiem :/

edytowany 1x, ostatnio: LOSMARCELOS, 2011-07-26 08:24

Pozostało 580 znaków

2011-07-26 08:26
bo
0

Robisz elementarny błąd

MojaListaDanych.add(dane);
// gdzies dalej... w kodzie
dane=new new mojpakiet.MojeDane(); //tego brakuje
dane.Tekst = "tekst2";
Jedno new jest nadmiarowe - bogdans 2011-07-26 08:28

Pozostało 580 znaków

2011-07-26 08:39
0

No działa :) Ale czemu tak?
Wydawało mi się, że wystarczy, że zmodyfikuje zawartość poszczególnych zmiennych w klasie przed dodaniem do listy i nie muszę za każdym razem tworzyć nowego egzemplarza klasy....

Pozostało 580 znaków

2011-07-26 08:47
bo

Przecież to jest oczywiste. Ty stworzyłeś jeden obiekt i wielokrotnie dodawałeś go do kolekcji.
Co będzie w kolekcji po takiej sekwencji?

ArrayList<Integer>liczby=new ArrayList<Integer>();
Integer liczba=new Integer(3);
for(int i=0;i<10;i++)
  liczby.add(liczba);

Będzie 10 referencji do tego samego obiektu.
Instrukcja

  liczby.set(3,7);

zmieni 3 na 7 w każdej pozycji kolekcji.

Pozostało 580 znaków

2011-07-26 08:56
0

Dzięki! Już wszystko jasne... :) Po prostu myślałem, że to trochę inaczej działa...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0