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 - wspólna wartość dla wszystkich obiektów znajdujących się na liście

erii 18 Cze 2014 23:20 1119 4
REKLAMA
  • #1 13720119
    erii
    Poziom 2  
    Posty: 3
    Witam,
    Próbuję napisać program który będzie odczytywał zapisaną w serializowanym pliku ArrayList zawierającą obiekty mojej klasy. Chcę aby wszystkie obiekty znajdujące się w tej liście posiadały jedną wspólną wartość typu int. Na początku chciałem stworzyć tą wartość jako statyczną, jednak wtedy po zapisaniu przepadała ona ponieważ niebyła jednoznacznie związana z obiektem więc niebyła zapisywana w pliku razem z obiektami.
    Później spróbowałem stworzyć dodatkową klasę(singleton) zawierającą składową typu int. Dodałem do mojej klasy obiekt tej klasy singleton jednak nie działa to do końca tak jakbym chciał.
    Jeśli stworzę np. trzy obiekty mojej klasy w ramach jednej "sesji" i dla nich ustawię tę wartość w klasie singleton a następnie dodam do listy i zapiszę do pliku to mają one wspólną wartość. Jednak jak wczytam ten plik i załaduję listę odczytam a następnie dodam nowy obiekt do tej listy to ma on już osobny obiekt singleton.
    Orientuje się ktoś jak zrobić by te obiekty znajdujące się na wczytanej liście i nowo dodane obiekty miały tylko jedną instancję tej klasy singleton? A może ma ktoś jakiś inny pomysł jak można by zrobić by obiekty znajdujące się na liście posiadały jedną wspólną wartość?
  • REKLAMA
  • #2 13722301
    gaskoin
    Poziom 38  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    A nie prościej po prostu dodać pole typu int do klasy ? Pokaż jakiś przykładowy kod.
  • REKLAMA
  • #3 13722328
    erii
    Poziom 2  
    Posty: 3
    @gaskoin
    Teoretycznie mogę ale wtedy będzie ta zmienna obecna we wszystkich obiektach znajdujących się na liście (i zajmować pamięć) gdy potrzebuję tylko jednej wartości a myślałem żeby przyoszczędzić na niej.
  • REKLAMA
  • #4 13727996
    McMonster
    Poziom 32  
    Posty: 1942
    Pomógł: 182
    Ocena: 57
    erii napisał:
    @gaskoin
    Teoretycznie mogę ale wtedy będzie ta zmienna obecna we wszystkich obiektach znajdujących się na liście (i zajmować pamięć) gdy potrzebuję tylko jednej wartości a myślałem żeby przyoszczędzić na niej.


    Oszczędzisz tutaj dosłownie kilka bajtów na instancję. Zapisuj więc tą wartość osobno. Pierwszy z brzego pomysł to rozszerzyć ArrayListę i dodać w niej to pole, którego wartość chcesz zachować raz, a w klasie obiektów na liście dodać to pole jako statyczne. Potem wystarczy w rozszerzonej ArrayLiście dodać zachowywanie tego pola przy zapisie odczytując je z klasy, a przy deserializacji ustawienie go.

    Istnieją specjalne metody, które można dodać przy rozszerzeniu ArrayListy, które wykonają te operacjie przy zapisie i odczycie, zobacz sobie tutaj.
  • #5 13728099
    erii
    Poziom 2  
    Posty: 3
    Właśnie już postanowiłem dodawać osobno zmienna int do tego pliku z ArrayList i później odczytywać Listę i tego inta.
REKLAMA