Doba Čtení: 4 minuty
abychom pochopili používání společník objekty, je důležité pochopit statické členy první. Naučili jsme se, že v objektově orientovaných jazycích jsou třídy plánem, který obsahuje členy, jako jsou pole a metody. Abychom však mohli přistupovat k těmto polím nebo metodám, musíme nejprve zkonstruovat objekty z těchto tříd.
podívejme se na příklad.
class Math { private val max = 100 def sum(a: Int, b: Int): Int = a + b}object Test { def main(args: Array): Unit = { val math = new Math() math.sum(5, 10) }}
vytvořili jsme třídu nazvanou Matematika s metodou nazvanou sum, která vezme dvě čísla a Vrátí součet jako výsledek.
Za účelem spuštění tohoto kódu, můžeme vytvořit instanci této třídy Math a použil součet metoda vynechání 5 a 10, příjem 15 jako výstupní. Jak však vidíme, metoda sum není závislá na žádné z členských proměnných matematické třídy.
například v tomto případě proměnná max. Takže by nemělo být nutné vytvářet instanci matematické třídy, aby bylo možné vyvolat metodu sum. Měli bychom být schopni to nazvat přímo v tomto případě. A to je místo, kde doprovodné objekty přicházejí do obrazu.
o doprovodných objektech si musíme pamatovat čtyři věci:
1. Sdílejí stejný název jako odpovídající třída.
2. Začínají klíčovým slovem“ objekt“.
3. Žijí ve stejném zdrojovém souboru jako odpovídající třídy.
4. Doprovodné objekty a odpovídající třídy se navzájem chovají jako soukromí členové.
Klíčové slovo „objekt“ říká, že se jedná o ojedinělý objekt. Jinými slovy, to znamená, že zatímco váš program běží, můžete vytvořit tolik instancí ze svých tříd, kolik chcete, ale objekt singleton by byl jen jeden a nebude jich více.
podívejme se na ně v akci pomocí našeho matematického příkladu.
object Math { def sum(a: Int, b: Int): Int = a + b def getPrivateMember: Int = = new Math().max}class Math { private val max = 100}object Test { def main(args: Array): Unit = { Math.sum(5, 10) Math.getPrivateMember }}
Jak můžeme vidět, jsme vytvořili nový singleton objekt nazvaný Matematika, která má stejný název jako naše třída Math. Začíná také klíčovým slovem „objekt“ a zůstává ve stejném souboru jako matematika třídy.
přesunuli jsme implementaci součtu z třídy do doprovodného objektu. To je proto, že, jak víme, že součet implementace není závislá na členské proměnné pro Matematické třídy, dávat to provedení do společníkem objekt bude pomoc volající, aby se vytvoří instance třídy Math a volat přímo.
existuje další metoda, kterou jsme napsali, abychom ukázali, že doprovodný objekt má přístup k soukromým členům své třídy.
zde getPrivateMember vytvoří instanci matematické třídy a vrátí ji soukromému členovi s názvem „max“. Zde je třeba poznamenat ještě jednu věc. Když definujeme getPrivateMember, nedávali jsme závorky. Ve Scale existuje konvence, ve které, pokud metoda nemá žádné argumenty a nevykonává žádný vedlejší účinek, což znamená, že je to čistá funkce, můžeme se rozhodnout vynechat závorky.
zde getPrivateMember právě vrací hodnotu členské proměnné, takže se rozhodneme vynechat závorky.
Math.sum(5, 10)Math.getPrivateMember
Když provedeme součet metoda, popravili jsme ho z Matematiky společník objekt a nemusel vytvářet novou instanci třídy Math. Navíc jsme byli schopni přistupovat k soukromé členské proměnné matematické třídy z doprovodného objektu.
Vytváření Objektů Pomocí Použít
víme, že za účelem vytvoření nové instance objektu, musíme použít „nové“ klíčové slovo.
například:
class Person(firstName: String, lastName: String) {def getName: String = firstName + lastName}object Test { def main(args: Array): Unit = { val alice = new Person("Alice", "Christy") }}
Máme třídu s názvem „Člověk“ s firstName a lastName jako třída parametry. A vytvoříme novou instanci osoby, jak je uvedeno výše. Vytvořili jsme „alice“ jako novou osobu, která prošla křestním jménem a příjmením.
ve Scale však existuje ještě jeden způsob, jak vytvářet objekty bez použití nového klíčového slova.
Existuje metoda zvaná „použít“ v companion objektu, který je speciálně ošetřeny tím, že Scala kompilátor, a to nám umožňuje vytvářet nové instance tříd bez nutnosti nové klíčové slovo. Naučme se, jak ji používat v našem kódu.
object Person { def apply(firstName: String, lastName: String): Person = new Person(firstName, lastName)}class Person(firstName: String, lastName: String) { def getName: String = firstName + " " + lastName}object Test { def main(args: Array): Unit = { val alice = Person("Alice", "Christy") println(p.getName) }}
jak vidíme zde, vytvořili jsme do něj doprovodný objekt s metodou apply. Vezme argumenty, které potřebujeme k vytvoření instance třídy Person, vytvoří instanci osoby interně a vrátí instanci. Jak vidíme, vytvořili jsme instanci třídy Person bez použití nového klíčového slova. A můžeme přistupovat k členům stejně jako jakýkoli jiný objekt. 🙂
to je vše o společném objektu z tohoto blogu. Pokračujte V Učení, Pokračujte V Růstu!!!