layout | title | language | partof | num | next-page | previous-page |
---|---|---|---|---|---|---|
tour | Singlton objekti | ba | scala-tour | 13 | regular-expression-patterns | pattern-matching |
Metode i vrijednosti koje ne pripadaju individualnim instancama klase pripadaju singlton objektima, označenim ključnom riječju object
umjesto class
.
package test object Blah { def sum(l: List[Int]): Int = l.sum }
Metoda sum
je dostupna globalno, i može se pozvati, ili importovati, kao test.Blah.sum
.
Singlton objekt je ustvari kratica za definisanje jednokratne klase, koja ne može biti direktno instancirana, i ima val
član object
, s istim imenom. Kao i val
, singlton objekti mogu biti definisani kao članovi trejta ili klase, iako je ovo netipično.
Singlton objekt može naslijediti klase i trejtove. Ustvari, case klasa bez tipskih parametara će podrazumijevano kreirati singlton objekt s istim imenom, i implementiranim Function*
trejtom.
Većina singlton objekata nisu samostalni, već su povezani s istoimenom klasom. “Singlton objekt istog imena” case klase, pomenut ranije, je jedan primjer ovoga. U ovom slučaju, singlton objekt se zove kompanjon objekt klase, a klasa se zove kompanjon klasa objekta.
Scaladoc ima posebnu podršku za prebacivanje između klase i njenog kompanjona: ako krug s velikim “C” ili “O” ima savijenu ivicu (kao papir), možete kliknuti na krug da pređete na kompanjon.
Klasa i njen kompanjon objekt, ako ga ima, moraju biti definisani u istom izvornom fajlu:
classIntPair(valx:Int, valy:Int) objectIntPair { importmath.Orderingimplicitdefipord:Ordering[IntPair] =Ordering.by(ip => (ip.x, ip.y)) }
Često vidimo typeclass (jedan od dizajn paterna) instance kao implicitne vrijednosti, kao navedeni ipord
, definisane u kompanjonu. Ovo je pogodno jer se i članovi kompanjona uključuju u implicitnu pretragu za potrebnim vrijednostima.
static
nije ključna riječ u Scali. Umjesto nje, svi članovi koji bi u Javi bili statički, uključujući i klase, trebaju ići u neki singlton objekt. Pristupa im se istom sintaksom, importovanim posebno ili grupno.
Java programeri nekada definišu statičke članove privatnim kao pomoćne vrijednosti/funkcije. Iz ovoga proizilazi čest šablon kojim se importuju svi članovi kompanjon objekta u klasu:
class X { import X._ def blah = foo } object X { private def foo = 42 }
U kontekstu ključne riječi private
, klasa i njen kompanjon su prijatelji. object X
može pristupiti privatnim članovima od class X
, i obrnuto. Da bi član bio zaista privatan, koristite private[this]
.
Za pogodno korištenje u Javi, metode, uključujući var
i val
vrijednosti, definisane direktno u singlton objektu također imaju statičke metode u kompanjon klasi, zvane statički prosljeđivači. Drugi članovi su dostupni kroz X$.MODULE$
statička polja za object X
.
Ako prebacite sve u kompanjon objekt i klasa ostane prazna koju ne želite instancirati, samo obrišite klasu. Statički prosljeđivači će biti kreirani svakako.