Objekter i Kotlin

1. Introduktion

Kotlin lånte mange ideer fra andre sprog; en af ​​sådanne konstruktioner er objekt.

I denne hurtige artikel vil vi se, hvad objekter er, og hvordan de kan bruges.

2. Objekter i Kotlin

I Kotlin er der som på næsten alle JVM-sprog begrebet a klasse som kernen i den objektorienterede programmeringsmodel. Kotlin introducerer begrebet an objekt oven i købet.

Hvorimod a klasse beskriver strukturer, der kan instantieres efter behov og giver mulighed for så mange forekomster, som det er nødvendigt, en objekt repræsenterer i stedet en enkelt statisk forekomstog kan aldrig have mere eller mindre end denne ene forekomst.

Dette er nyttigt til forskellige teknikker, herunder singleton-objekter og enkel emballering af funktionalitet til indkapsling:

objekt SimpleSingleton {val answer = 42; sjov hilsen (navn: String) = "Hej, $ navn!" } assertEquals (42, SimpleSingleton.answer) assertEquals ("Hej verden!", SimpleSingleton.greet ("verden"))

Objekter tilbyder også fuld support til synlighedsmodifikatorer, der muliggør dataskydning og indkapsling som med enhver anden klasse:

objekt Tæller {private var count: Int = 0 fun currentCount () = count fun increment () {++ count}} Counter.increment () println (Counter.currentCount ()) println (Counter.count) // dette mislykkes at kompilere

Ud over, objekter kan udvide klasser og implementere grænseflader. Dermed er de effektivt enkeltstående forekomster af forældreklasser, nøjagtigt som forventet.

Dette kan være meget nyttigt i tilfælde, hvor vi har en statsløs implementering, og der ikke er behov for at oprette en ny instans hver gang - f.eks. Komparator:

objekt ReverseStringComparator: Comparator {tilsidesætte sjov sammenligning (o1: String, o2: String) = o1.reversed (). comparTo (o2.reversed ())} val strings = listOf ("Hello", "World") val sortedStrings = strings .sortedWith (ReverseStringComparator)

3. Hvad er et ledsagerobjekt?

Ledsagerobjekter er stort set de samme som en standard objekt definition, kun med et par ekstra funktioner for at gøre udviklingen lettere.

Et ledsagende objekt erklæres altid inde i en anden klasse. Mens det kan have et navn, behøver det ikke at have et navn, i hvilket tilfælde den automatisk har navnet Ledsager:

class OuterClass {companion object {// Equivalent to "companion object Companion"}}

Companion-objekter giver adgang til deres medlemmer indefra i ledsagerklassen uden at angive navnet.

Samtidig kan man få adgang til synlige medlemmer uden for klassen, når de er forud for klassens navn:

klasse OuterClass {ledsagerobjekt {private val secret = "Du kan ikke se mig" val public = "Du kan se mig"} sjov getSecretValue () = secret} assertEquals ("Du kan se mig", OuterClass.public) assertEquals ( "Du kan ikke se mig", OuterClass.secret) // Kan ikke få adgang til 'hemmelig'

4. Statiske felter

Hovedanvendelsen til ledsagende objekter er at erstatte statiske felter / metoder, der er kendt fra Java. Disse felter genereres dog ikke automatisk som sådan i den resulterende klassefil.

Hvis vi har brug for at de skal genereres, skal vi bruge @JvmStatic kommentar på feltet i stedet, som derefter genererer bytekoden som forventet:

klasse StaticClass {ledsagende objekt {@JvmStatic val staticField = 42}}

Uden at gøre dette, det statiske felt staticField er ikke let tilgængelig fra Java-kode.

Tilføjelse af denne kommentar genererer feltet nøjagtigt efter behov for et standard statisk felt, hvilket muliggør fuld interoperabilitet fra Java, hvis det er nødvendigt.

Dette betyder, at ovenstående genererer en statisk metode getStaticField () på den StaticClass klasse.

5. Konklusion

Objekter i Kotlin tilføjer et helt ekstra lag, som vi kan bruge, hvilket strømliner vores kode yderligere og gør det lettere at udvikle.

Companion-objekter tager dette endnu længere, hvilket giver mulighed for renere kode, der er lettere at vedligeholde og arbejde med.

Som altid kan kodeuddrag findes over på GitHub.