Immutable objecten zijn veel makkelijker om mee te werken dan mutable objecten omdat je veel minder op je consistentie van objecten hoeft te letten. Maar sommige objecten die kan ik niet in 1 slag maken (dwz met een constructor vullen bv).
vb:
Een persoonList zou je bv vanuit XML kunnen vullen met Personen maar zo gauw je klaar bent met het inlezen van PersoonList dan zou je misschien willen dat het niet meer mogelijk is dat een ander object Personen kan toevoegen. (Geen vragen waarom aub... het gaat even om het immutable maken).
Ik heb nu maar een interface geschreven:
en exception:
en deze bij PersoonList geimplementeerd.
Zo gauw je nu klaar bent met het inlezen van alle personen en er dus geen personen meer aan de lijst toegevoegd hoeven te worden, makeImmutable aanroepen. Het object is nu immutable en als een andere classe er nog een persoon aan probeerd toe te voegen krijg je dus een ImmutableException.
Ik wil graag weten of jullie deze problemen wel eens zijn tegengekomen en wat jullie van dit idee vinden.
ps: geen vragen over waarom de PersoonList immutable moet worden, het is alleen een voorbeeld
[edit] layout + knipoog
vb:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| class PersoonList{
private ArrayList _persoonList = new ArrayList();
public PersoonList(){
}
public void add(Persoon persoon){
//checks ed.
_persoonList.add(persoon);
}
} |
Een persoonList zou je bv vanuit XML kunnen vullen met Personen maar zo gauw je klaar bent met het inlezen van PersoonList dan zou je misschien willen dat het niet meer mogelijk is dat een ander object Personen kan toevoegen. (Geen vragen waarom aub... het gaat even om het immutable maken).
Ik heb nu maar een interface geschreven:
code:
1
2
3
4
5
6
| public interface Immutable{
public boolean isImmutable();
public void makeImmutable();
} |
en exception:
code:
1
2
3
4
5
6
7
8
9
| public class ImmutableException extends RuntimeException{
public ImmutableException(){
}
public ImmutableException(String message){
super(message);
}
} |
en deze bij PersoonList geimplementeerd.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| class PersoonList implements Immutable{
private ArrayList _persoonList = new ArrayList();
private boolean _immutable = false;
public PersoonList(){
}
public void add(Persoon persoon){
if(_immutable){
throw new ImmutableException();
}
//checks ed.
_persoonList.add(persoon);
}
public boolean makeImmutable(){
if(_immutable){
throw new ImmutableException(
"persoonList already is immutable"
);
}
_immutable = true;
}
public boolean isImmutable(){
return _immutable;
}
} |
Zo gauw je nu klaar bent met het inlezen van alle personen en er dus geen personen meer aan de lijst toegevoegd hoeven te worden, makeImmutable aanroepen. Het object is nu immutable en als een andere classe er nog een persoon aan probeerd toe te voegen krijg je dus een ImmutableException.
Ik wil graag weten of jullie deze problemen wel eens zijn tegengekomen en wat jullie van dit idee vinden.
ps: geen vragen over waarom de PersoonList immutable moet worden, het is alleen een voorbeeld
[edit] layout + knipoog