Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
gwarantują,żeichobiektypododaniudozbiorówidomap(jakokluczemap)nigdy
niezmieniąswoichstanów,co–jakpamiętamy–jestwarunkiem,abyzbioryoraz
kluczewmapachzachowywałyspójność(oczywiściewpokazanejtuklasiePerson
trzebabybyłojeszczezdefiniowaćmetodyequals()ihashCode(),takbyobiekty
tejklasymogłybyćdodawanedoHashSetlubwystępowaćjakokluczewHashMap);
żadnametoda,uzyskująctakiobiektjakoargument,niemożezmienićjegostanów,
azatemunikamyprzypadkowychbłędów;
posługiwaniesięnimiwprogramowaniuwspółbieżnymniewymagasynchronizacji,
którazwyklejesttrudnymzadaniem(zob.rozdziałoprogramowaniuwspółbieżnym).
PokazanaklasaPersonniejestabsolutnieniezmienna.Zgodniezzasadamipowinniśmy
wniejjeszczewkilkumiejscachużyćsłowakluczowegofinal:
finalpublicclassPerson{
//tufinalzabraniadziedziczeniaklasyPerson
//atuprzezfinalzabezpieczamysięprzedbłędamiwkodzieklasy:
privatefinalStringname;
privatefinalStringpesel;
//iii
}
Stosowanieklasniezmiennychznacznieułatwiaprogramowanie,aleoczywiścienie
zawszemożemytorobić.NaprzykładwprzypadkuklasyVehiclejejzmienność(zmien-
nestanypojazdów:stoi,jedzieitp.)wydajesięnaturalnymrozwiązaniem.
1.7.Inicjowanie
Podczastworzeniaobiektu:
polaklasymajązagwarantowaneinicjowanienawartościZERO(0,false–dla
typuboolean,null–dlareferencji);
zwyklewkonstruktorzedokonujesięreinicjacjipól;
alemożnarównieżposłużyćsięjawnąinicjacjąpodczasdeklaracjipól.
WtrakcietworzeniaobiektuklasyVehicle(newVehicle(iii)–por.kod1.6)elemen-
tynowegoobiektu,odpowiadającepolomklasy,uzyskająwartości0(dlaelementówtypu
int)oraznulldlaelementuodpowiadającegoreferencjom(owneristate).Następnie
zostaniewywołanykonstruktor,wktórymdokonujemywłaściwegoinicjowania.
Możnabybyłonapisaćnp.:
privateVehStatestate=STOPPED;//jawnainicjacjapola
iusunąćzkonstruktorainstrukcjęstate=STOPPED.
28
1.Klasy