Dataklasser i Kotlin

1. Oversikt

Kotlin-språket introduserer konseptet med dataklasser, som representerer enkle klasser som brukes som databeholdere og ikke innkapsler noen ekstra logikk. Enkelt sagt gjør Kotlins løsning oss i stand til å unngå å skrive mye kokerplatekode.

I denne raske artikkelen tar vi en titt på dataklasser i Kotlin og sammenligner dem med deres Java-kolleger.

2. Kotlin-oppsett

For å komme i gang med å sette opp Kotlin-prosjektet, sjekk vårt introduksjon til Kotlin-språket opplæringen.

3. Dataklasser i Java

Hvis vi ønsket å lage en Film oppføring i Java, trenger vi å skrive mye kokerplatekode:

offentlig klassefilm {privat strengnavn; private String studio; privat flyterangering; public Movie (String name, String studio, float rating) {this.name = name; this.studio = studio; this.rating = vurdering; } public String getName () {return name; } public void setName (String name) {this.name = name; } offentlig String getStudio () {returstudio; } public void setStudio (String studio) {this.studio = studio; } public float getRating () {return rating; } public void setRating (float rating) {this.rating = rating; } @ Override public int hashCode () {final int prime = 31; int resultat = 1; resultat = prime * resultat + ((navn == null)? 0: name.hashCode ()); resultat = prime * resultat + Float.floatToIntBits (vurdering); resultat = prime * resultat + ((studio == null)? 0: studio.hashCode ()); returresultat; } @Override offentlig boolsk er lik (Objekt obj) {hvis (denne == obj) returnerer sann; hvis (obj == null) returnerer false; hvis (getClass ()! = obj.getClass ()) returnerer false; Film annet = (Film) obj; if (name == null) {if (other.name! = null) returner false; } annet hvis (! name.equals (other.name)) returnerer false; hvis (Float.floatToIntBits (rating)! = Float.floatToIntBits (other.rating)) returnerer false; if (studio == null) {if (other.studio! = null) returner false; } annet hvis (! studio.equals (other.studio)) returnerer false; returner sant; } @ Override public String toString () {return "Movie [name =" + name + ", studio =" + studio + ", rating =" + rating + "]"; }}

86 linjer med kode. Det er mye å lagre bare tre felt i en enkel klasse.

4. Kotlin-dataklasse

Nå skal vi lage det samme Film klasse, med samme funksjonalitet, ved bruk av Kotlin:

dataklasse Film (var navn: String, var studio: String, var vurdering: Float)

Som vi kan se, er det enormt enklere og renere. Konstruktør, toString (), er lik (), hashCode (), og tillegg kopiere() og komponentN () funksjoner genereres automatisk.

4.1. Bruk

En dataklasse blir instansert på samme måte som andre klasser:

val movie = Movie ("Whiplash", "Sony Pictures", 8.5F)

Nå er egenskapene og funksjonene til tilgjengelige:

println (movie.name) // Whiplash println (movie.studio) // Sony Pictures println (movie.rating) //8.5 movie.rating = 9F println (movie.toString ()) // Movie (name = Whiplash, studio = Sony Pictures, vurdering = 9.0)

4.2. Kopifunksjon

De kopiere() funksjonen blir opprettet, i tilfelle at vi trenger å kopiere et objekt som endrer noen av egenskapene, men holder resten uendret.

val betterRating = movie.copy (rating = 9.5F) println (betterRating.toString ()) // Movie (name = Whiplash, studio = Sony Pictures, rating = 9.5) 

Java gir ikke en klar, naturlig måte å kopiere / klone objekter på. Vi kunne bruke Klonbar grensesnitt, SerializationUtils.clone () eller a kloningskonstruktør.

4.3. Destruksjonserklæringer

Destruktureringserklæringer tillater oss å behandle objektegenskaper som individuelle verdier. For hver eiendom i ut dataklasse, a komponentN () genereres:

movie.component1 () // name movie.component2 () // studio movie.component3 () // rating

Vi kan også lage flere variabler fra objektet eller direkte fra en funksjon - det er viktig å huske på å bruke parentes:

val (navn, studio, vurdering) = film moro getMovieInfo () = film val (namef, studiof, ratingf) = getMovieInfo ()

4.4. Krav til dataklasse

For å opprette en dataklasse, må vi oppfylle følgende krav:

  • Primærkonstruktøren må ha minst en parameter
  • Alle primære konstruktorparametere må merkes som val eller var
  • Dataklasser kan ikke være abstrakte, åpne, forseglede eller indre
  • (før 1.1.) Dataklasser kan bare implementere grensesnitt

Siden 1.1 kan dataklasser utvide andre klasser.

Hvis den genererte klassen må ha en parameterløs konstruktør, må standardverdier for alle egenskaper spesifiseres:

dataklasse Film (var navn: String = "", var studio: String = "", var vurdering: Float = 0F)

5. Konklusjon

Vi har sett dataklasser i Kotlin, bruken og kravene, den reduserte mengden kildeskrift skrevet og sammenligninger med den samme koden i Java.

Hvis du vil lære mer om Kotlin, kan du sjekke artikler som Kotlin Java-interoperabilitet og det allerede nevnte Introduksjon til Kotlin-språket.

Fullstendig implementering av disse eksemplene finner du i GitHub-prosjektet vårt.


$config[zx-auto] not found$config[zx-overlay] not found