Objekty v Kotline
1. Úvod
Kotlin si veľa nápadov požičal z iných jazykov; jedným z takýchto konštruktov je objekt.
V tomto rýchlom článku uvidíme, čo sú to objekty a ako sa dajú použiť.
2. Objekty v Kotline
V Kotline, rovnako ako takmer vo všetkých jazykoch JVM, existuje koncept a trieda ako jadro modelu objektovo orientovaného programovania. Kotlin zavádza koncept objekt Na vrchu tamtoho.
Keďže a trieda popisuje štruktúry, ktoré je možné inštancovať podľa potreby a umožňuje toľko prípadov, koľko je potrebné, an objekt namiesto toho predstavuje jednu statickú inštanciu, a nikdy nemôže mať viac alebo menej ako tento jeden prípad.
To je užitočné pre rôzne techniky, vrátane jednoduchých objektov a jednoduchého zabalenia funkcií na zapuzdrenie:
objekt SimpleSingleton {hodnota odpovede = 42; fun greet (name: String) = "Dobrý deň, $ name!" } assertEquals (42, SimpleSingleton.answer) assertEquals ("Dobrý deň, svet!", SimpleSingleton.greet ("svet"))
Objekty tiež ponúkajú úplnú podporu pre modifikátory viditeľnosti, umožňujúce skrývanie a zapuzdrovanie údajov ako v ktorejkoľvek inej triede:
Counter objektu {private var count: Int = 0 fun currentCount () = count fun increment () {++ count}} Counter.increment () println (Counter.currentCount ()) println (Counter.count) // toto zlyhá zostaviť
Navyše, objekty môžu rozširovať triedy a implementovať rozhrania. Pritom sú efektívne jednorazovými inštanciami rodičovských tried, presne podľa očakávania.
To môže byť veľmi užitočné v prípadoch, keď máme implementáciu bez štátnej príslušnosti a nie je potrebné zakaždým vytvárať novú inštanciu - napr. Komparátor:
object ReverseStringComparator: Comparator {override fun compare (o1: String, o2: String) = o1.reversed (). compareTo (o2.reversed ())} val strings = listOf ("Hello", "World") val sortStrings = strings .sortedWith (ReverseStringComparator)
3. Čo je sprievodný objekt?
Sprievodné objekty sú v podstate rovnaké ako štandardné objekt definícia, iba s niekoľkými ďalšími funkciami, ktoré uľahčujú vývoj.
Sprievodný objekt je vždy deklarovaný vo vnútri inej triedy. Aj keď môže mať meno, nemusí ho mať, v takom prípade má automaticky názov Spoločník:
trieda OuterClass {sprievodný objekt {// ekvivalent k „sprievodnému objektu Companion“}}
Sprievodné objekty umožňujú prístup k ich členom zvnútra sprievodnej triedy bez uvedenia názvu.
Zároveň je možné k viditeľným členom získať prístup aj mimo triedy, ak je predponou názvu triedy:
trieda OuterClass {sprievodný objekt {private val secret = "Nevidíš ma" val public = "Môžeš ma vidieť"} zábava getSecretValue () = secret} assertEquals ("Vidíš ma", OuterClass.public) assertEquals ( „You can't see me“, OuterClass.secret) // Nemôžem získať prístup k „tajomstvu“
4. Statické polia
Hlavné použitie pre sprievodné objekty je nahradenie statických polí / metód známych z Javy. Tieto polia sa však automaticky nevygenerujú ako také vo výslednom súbore triedy.
Ak ich potrebujeme generovať, musíme použiť @JvmStatic namiesto toho do poľa anotáciu, ktorá potom podľa očakávania vygeneruje bytecode:
trieda StaticClass {sprievodný objekt {@JvmStatic val staticField = 42}}
Bez toho, aby ste to urobili, statické pole staticField nie je ľahko prístupný z kódu Java.
Pridaním tejto anotácie sa vygeneruje pole presne podľa potreby pre štandardné statické pole, čo v prípade potreby umožní úplnú interoperabilitu z prostredia Java.
To znamená, že vyššie uvedené generuje a statický metóda getStaticField () na StaticClass trieda.
5. Záver
Objekty v Kotline pridávajú celú vrstvu navyše, ktorú môžeme použiť, čím ďalej zjednodušujú náš kód a uľahčujú jeho vývoj.
Sprievodné objekty to potom posúvajú ešte ďalej a umožňujú tak čistejší kód, ktorý sa ľahšie udržuje a pracuje sa s ním.
Útržky kódu nájdete ako vždy na GitHube.