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.