logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Java - dodawanie obiektów zamiast referencji do ArrayList

03 Cze 2013 01:08 3972 8
REKLAMA
  • #1 12375838
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #2 12376200
    leoha
    Poziom 17  
    Posty: 173
    Pomógł: 18
    Ocena: 8
    gamer512 napisał:
    Czy istnieje jakiś sposób aby do listy dodawać obiekt a nie jego referencję?

    Nie istnieje.

    gamer512 napisał:
    Moim celem jest aby każdy zwrócony obiekt typu Food był dodawany do ArrayList a niestety na razie dodaje mi tylko referencje i w efekcie dostaje listę wypełnioną identycznymi obiektami.

    Przy kazym "read" lini tworz NOWY obiekt Food w funkcji do czytania i dodawaj referencje nowego obiektu do listy.

    BTW. Jeżeli nigdzie więcej nie zapisujesz i czytasz tego pliku (jak np inna aplikacja jeszcze - nie Javowa), to uzyj standardowego mechanizmu do serializacji danych - bedziesz mogl latwo zapisywac i odczytywac np liste obiektów, ktore zaweirają dane, których używasz.
  • #3 12377664
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #4 12377989
    leoha
    Poziom 17  
    Posty: 173
    Pomógł: 18
    Ocena: 8
    gamer512 napisał:
    Mógłbyś napisać jak to zrobić??

    Wygląda na to, że to robisz, wiec sprawdz czy nie masz jakiegos błedu w tej pokrętnej logice do czytania lini i czy rzeczywiscie odczytuje różne wartości.
  • REKLAMA
  • #5 12378900
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #6 12379286
    krru
    Poziom 33  
    Posty: 1819
    Pomógł: 230
    Ocena: 214
    A czy jesteś pewny, że nazwa jest za każdym razem oddzielnym obiektem? String też jest klasą i pola tego typu to referencję. Może masz rożne obiekty Food, ale wszytkie są powiązane do jednego napisu. Deklaracja String l_00 = "" nie tworzy nowego obiektu, tylko przypisuje referencję do statycznego obiektu. Z drugiej strony w Javie Stringi są 'niemodyfikowalne' i wszystkie ich modyfikację w sumie tworzą nowy obiekt, więc l_00 += (char)(cos tam) powinno utworzyć nowy obiekt, ale jakoś nie mam pewności czy += może tworzyć nowy obiekt.
    Wypróbuj dwie zmiany:
    1. String l_00 = new String();
    2. l_00 = l_00 + (char)(wyłuskanie znaku z linii).
  • #7 12380331
    Konto nie istnieje
    Konto nie istnieje  
  • #8 12380460
    leoha
    Poziom 17  
    Posty: 173
    Pomógł: 18
    Ocena: 8
    gamer512 napisał:
    To jeszcze notka dla potomnych jeśli tworzycie nową klasę obiektów z myślą o wrzucaniu ich do lisy to nie zastrzegajcie pól tej klasy jako static.

    Nie mieszaj początkującym. Static to nie jest żadne "zastrzeganie" pól. Poczytaj dokładnie co to są pola statyczne w Java i do czego służą.
  • #9 12380890
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

✨ Użytkownik ma problem z dodawaniem obiektów typu Food do ArrayList w Javie, ponieważ zamiast tworzyć nowe obiekty, dodaje jedynie referencje do jednego obiektu, co skutkuje identycznymi elementami na liście. Odpowiedzi sugerują, aby w metodzie read() tworzyć nowe instancje obiektów Food dla każdej linii pliku. Użytkownik odkrył, że zdefiniowanie pól w klasie Food jako statycznych powodowało ten problem. Wskazano również na znaczenie poprawnego zarządzania obiektami i referencjami w Javie oraz na różnice między obiektami statycznymi a instancjami.
Wygenerowane przez model językowy.
REKLAMA