🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#153433
Author: Jacek Czerwinski
Date: Fri, 11 May 2012 06:39
10 lines
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
#153434
Author: Arivald
Date: Fri, 11 May 2012 07:18
23 lines
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
#153435
Author: nullpointer
Date: Fri, 11 May 2012 18:05
18 lines
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