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.
Kompanjoni (prijatelji)
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:
class IntPair(val x: Int, val y: Int)
object IntPair {
import math.Ordering
implicit def ipord: 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.
Napomene Java programerima
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.
Contributors to this page:
Contents
- Uvod
- Osnove
- Sjedinjeni tipovi
- Klase
- Podrazumijevane vrijednosti parametara
- Imenovani parametri
- Trejtovi
- Tuples
- Kompozicija mixin klasa
- Funkcije višeg reda
- Ugniježdene metode
- Curry-jevanje
- Case klase
- Podudaranje uzoraka (pattern matching)
- Singlton objekti
- Regularni izrazi
- Ekstraktor objekti
- For komprehensije
- Generičke klase
- Varijanse
- Gornja granica tipa
- Donja granica tipa
- Unutarnje klase
- Apstraktni tipovi
- Složeni tipovi
- Self-tipovi
- Implicitni parametri
- Implicitne konverzije
- Polimorfne metode
- Lokalno zaključivanje tipova (type inference)
- Operatori
- By-name parametri
- Anotacije
- Packages and Imports
- Package Objects