Dataklasser i Kotlin

1. Oversigt

Kotlin-sproget introducerer begrebet dataklasser, som repræsenterer enkle klasser, der bruges som databeholdere og ikke indkapsler yderligere logik. Kort sagt, Kotlins løsning giver os mulighed for at undgå at skrive en masse kedelpladekode.

I denne hurtige artikel vil vi se på dataklasser i Kotlin og sammenligne dem med deres Java-kolleger.

2. Kotlin-opsætning

For at komme i gang med opsætningen af ​​Kotlin-projektet, se vores introduktion til Kotlin-sproget vejledning.

3. Dataklasser i Java

Hvis vi ville skabe et Film post i Java, vi bliver nødt til at skrive en masse kedelpladekode:

offentlig klassefilm {privat strengnavn; private String studio; privat float-vurdering; offentlig film (String name, String studio, float rating) {this.name = name; this.studio = studie; this.rating = rating; } public String getName () {return name; } public void setName (strengnavn) {this.name = name; } offentlig String getStudio () {returstudie; } 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 (rating); resultat = prime * resultat + ((studio == null)? 0: studio.hashCode ()); returresultat } @ Override offentlige boolske lig (Objekt obj) {hvis (dette == obj) returnerer sandt; hvis (obj == null) returnerer false; hvis (getClass ()! = obj.getClass ()) returnerer false; Film andet = (Film) objekt; if (name == null) {if (other.name! = null) returner false; } ellers 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; } ellers hvis (! studio.equals (other.studio)) returnerer false; returner sandt; } @Override public String toString () {return "Film [name =" + name + ", studio =" + studio + ", rating =" + rating + "]"; }}

86 linjer kode. Det er meget at kun gemme tre felter i en simpel klasse.

4. Kotlin-dataklasse

Nu opretter vi det samme Film klasse med de samme funktioner ved hjælp af Kotlin:

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

Som vi kan se, er det meget lettere og renere. Konstruktør, toString (), er lig med (), hashCode (), og yderligere kopi() og komponentN () funktioner genereres automatisk.

4.1. Anvendelse

En dataklasse instantieres på samme måde som andre klasser:

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

Nu er egenskaberne og funktionerne til tilgængelige:

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. Kopifunktion

Det kopi() funktion oprettes, hvis vi har brug for at kopiere et objekt, der ændrer nogle af dets egenskaber, men holder resten uændret.

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

Java giver ikke en klar, indfødt måde til kopiering / kloning af objekter. Vi kunne bruge Klonabel interface, SerializationUtils.clone () eller a kloningskonstruktør.

4.3. Erklæringer om destruktion

Destruktureringserklæringer giver os mulighed for at behandle objektegenskaber som individuelle værdier. For hver ejendom i vores dataklasse, a komponentN () genereres:

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

Vi kan også oprette flere variabler fra objektet eller direkte fra en funktion - det er vigtigt at huske at bruge parenteser:

val (navn, studie, vurdering) = film sjovt getMovieInfo () = film val (namef, studiof, ratingf) = getMovieInfo ()

4.4. Krav til dataklasse

For at oprette en dataklasse skal vi opfylde følgende krav:

  • Den primære konstruktør skal have mindst en parameter
  • Alle primære konstruktorparametre skal markeres som val eller var
  • Dataklasser kan ikke være abstrakte, åbne, forseglede eller indre
  • (før 1.1.) Dataklasser kan kun implementere grænseflader

Siden 1.1 kan dataklasser udvide andre klasser.

Hvis den genererede klasse skal have en parameterløs konstruktør, skal standardværdier for alle egenskaber angives:

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

5. Konklusion

Vi har set dataklasser i Kotlin, deres brug og krav, den reducerede mængde kogepladekode skrevet og sammenligninger med den samme kode i Java.

Hvis du vil lære mere om Kotlin, skal du kontrollere artikler som f.eks Kotlin Java-interoperabilitet og det allerede nævnte Introduktion til Kotlin-sproget.

Den fulde implementering af disse eksempler kan findes i vores GitHub-projekt.


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