Thread View: pl.comp.lang.java
3 messages
3 total messages
Started by Jacek Czerwinski
Fri, 11 May 2012 06:39
Niezmienne (immutable) ale od pewnego czasu
Author: Jacek Czerwinski
Date: Fri, 11 May 2012 06:39
Date: Fri, 11 May 2012 06:39
10 lines
1352 bytes
1352 bytes
Są pewne struktury (kolekcje obiektów). Na etapie ich budowania są dostępne (jakby public). Potem jest etap ich używania i traktujemy jako niezmienne (jakby uzyskały swoiste final), ale nie jest to zabezpieczone. 1. czy jest takie czary-mary, że w pewnym momencie jest to immutable Colection również immutable elementów. Nie chciałbym strzelać z armaty do wróbla. Można się spodziewać, że referencje do w/w gdzieś są zapamiętane, więc podmiana na siostrzaną strukturę nie wchodzi raczej w grę. 2. czy w ogóle jest się czym przejmować?
Re: Niezmienne (immutable) ale od pewnego czasu
Author: Arivald
Date: Fri, 11 May 2012 07:18
Date: Fri, 11 May 2012 07:18
23 lines
1946 bytes
1946 bytes
W dniu 2012-05-11 08:39, Jacek Czerwinski pisze: > Są pewne struktury (kolekcje obiektów). Na etapie ich budowania są > dostępne (jakby public). Potem jest etap ich używania i traktujemy jako > niezmienne (jakby uzyskały swoiste final), ale nie jest to zabezpieczone. > > 1. czy jest takie czary-mary, że w pewnym momencie jest to immutable > Colection również immutable elementów. Nie chciałbym strzelać z armaty > do wróbla. Można się spodziewać, że referencje do w/w gdzieś są > zapamiętane, więc podmiana na siostrzaną strukturę nie wchodzi raczej w > grę. na samą listę, zrób dekorator do List który pamięta czy kolekcja została już zablokowana, nie pozwala na odblokowanie, i jeśli zablokowana to settery rzucają wyjątki. na elementy, po prostu trzymaj kopie w liście (Cloneable), nie referencje do oryginałów. A referencje do kopii zwracaj opakowane tak że settery rzucają wyjątki. -- Arivald
Re: Niezmienne (immutable) ale od pewnego czasu
Author: nullpointer
Date: Fri, 11 May 2012 18:05
Date: Fri, 11 May 2012 18:05
18 lines
1542 bytes
1542 bytes
Ja to zazwyczaj robię tak, że kolekcja (lista, zbiór, whatever) jest
"mutable" wewnątrz jakiejś klasy, która odpowiada za jej budowanie.
Po czym ta klasa ma metodę:
public Collection<Something> getSomethings() {
return Collections.unmodifiableCollection(mSomethings);
}
Trick polega na tym, że mSomethings nadal jest "mutable" więc "w razie
czego" wewnątrz klasy można aktualizować zawartość, ale już na zewnątrz
można z tej kolekcji tylko czytać (kwestie Refleksji pomijam, bo tu nikt
i nic nie jest bezpieczne).
A, no i jest jeszcze Guava i jej ImmutableList, które na hocki-klocki
jak wyżej nie pozwala i jest naprawdę immutable.
--
npe
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads