Predmeti u Kotlinu

1. Uvod

Kotlin je mnoge ideje posudio iz drugih jezika; jedan od takvih konstrukata je objekt.

U ovom kratkom članku vidjet ćemo što su objekti i kako se mogu koristiti.

2. Predmeti u Kotlinu

U Kotlinu, kao i u gotovo svim JVM jezicima, postoji koncept a razred kao srž modela objektno orijentiranog programiranja. Kotlin uvodi koncept an objekt na vrhu toga.

Dok a razred opisuje strukture koje se mogu instancirati po želji i omogućuje onoliko primjeraka koliko je potrebno, an objekt umjesto toga predstavlja jednu statičnu instancu, i nikada ne može imati više ili manje od ove instance.

Ovo je korisno za razne tehnike, uključujući pojedinačne predmete i jednostavno pakiranje funkcionalnosti za enkapsulaciju:

objekt SimpleSingleton {val odgovor = 42; fun greet (name: String) = "Zdravo, $ name!" } assertEquals (42, SimpleSingleton.answer) assertEquals ("Zdravo, svijet!", SimpleSingleton.greet ("svijet"))

Objekti također nude punu podršku za modifikatore vidljivosti, omogućujući skrivanje i enkapsulaciju podataka kao i bilo koja druga klasa:

objekt Counter {privatni var count: Int = 0 fun currentCount () = count zabavni prirast () {++ count}} Counter.increment () println (Counter.currentCount ()) println (Counter.count) // ovo neće uspjeti sastaviti

U Dodatku, objekti mogu proširiti klase i implementirati sučelja. Pritom su oni zapravo pojedinačni primjeri roditeljskih klasa, točno onako kako se očekivalo.

To može biti vrlo korisno u slučajevima kada imamo implementaciju bez državljanstva i nema potrebe za stvaranjem nove instance svaki put - npr. Usporednik:

objekt ReverseStringComparator: Komparator {nadjačati zabavnu usporedbu (o1: String, o2: String) = o1.reversed (). compareTo (o2.reversed ())} val strings = listOf ("Hello", "World") val sortedStrings = string .sortedWith (ReverseStringComparator)

3. Što je prateći objekt?

Popratni objekti u osnovi su isti kao i standardni objekt definicija, samo s nekoliko dodatnih značajki za olakšavanje razvoja.

Popratni objekt uvijek se deklarira unutar druge klase. Iako može imati ime, ne treba ga imati, u tom slučaju automatski ima naziv Pratilac:

klasa OuterClass {companion object {// Ekvivalentno "companion object Companion"}}

Popratni objekti omogućuju pristup njihovim članovima iz klase popratnih podataka bez navođenja imena.

Istodobno, vidljivim članovima može se pristupiti izvan razreda ako im je naziv klase predfiks:

klasa OuterClass {prateći objekt {private val secret = "Ne možete me vidjeti" val public = "Možete me vidjeti"} zabava getSecretValue () = secret} assertEquals ("Možete me vidjeti", OuterClass.public) assertEquals ( "Ne možeš me vidjeti", OuterClass.secret) // Ne mogu pristupiti 'secret'

4. Statička polja

Glavna upotreba popratnih objekata je zamjena statičkih polja / metoda poznatih s Jave. Međutim, ta se polja ne generiraju automatski kao takva u rezultirajućoj datoteci klase.

Ako ih trebamo generirati, moramo koristiti @JvmStatic umjesto toga napomena na polju, koja će zatim generirati bajt kod kako se očekuje:

klasa StaticClass {prateći objekt {@JvmStatic val staticField = 42}}

Bez toga, statično polje staticField nije lako dostupan s Java koda.

Dodavanjem ove napomene generira se polje točno onako kako je potrebno za standardno statičko polje, omogućujući potpunu interoperabilnost Jave ako je potrebno.

To znači da gore navedeno stvara a statički metoda getStaticField () na StaticClass razred.

5. Zaključak

Objekti u Kotlinu dodaju čitav dodatni sloj koji možemo koristiti, dodatno usmjeravaju naš kôd i olakšavaju razvoj.

Popratni objekti zatim to čine još dalje, omogućujući čišći kod koji je lakši za održavanje i rad s njim.

Kao i uvijek, isječke koda možete pronaći na GitHub-u.