Dátové triedy v Kotline

1. Prehľad

Jazyk Kotlin zavádza koncept dátových tried, ktoré predstavujú jednoduché triedy používané ako dátové kontajnery a nezahŕňajú žiadnu ďalšiu logiku. Jednoducho povedané, Kotlinovo riešenie nám umožňuje vyhnúť sa písaniu veľkého množstva štandardných kódov.

V tomto rýchlom článku sa pozrieme na dátové triedy v Kotline a porovnáme ich s ich náprotivkami v jazyku Java.

2. Nastavenie Kotlin

Ak chcete začať nastavovať projekt Kotlin, pozrite si náš úvod do jazyka Kotlin návod.

3. Dátové triedy v Jave

Keby sme chceli vytvoriť a Film zápis v Jave, museli by sme napísať veľa štandardných kódov:

public class Movie {private String name; súkromné ​​štúdio String; súkromné ​​plavákové hodnotenie; public Movie (Názov reťazca, Štúdio reťazcov, hodnotenie float) {this.name = meno; this.studio = studio; this.rating = hodnotenie; } public String getName () {návratové meno; } public void setName (názov reťazca) {this.name = name; } public String getStudio () {return studio; } public void setStudio (String studio) {this.studio = studio; } public float getRating () {návrat hodnotenie; } public void setRating (plávajúce hodnotenie) {this.rating = hodnotenie; } @Override public int hashCode () {final int prime = 31; int výsledok = 1; result = prime * result + ((name == null)? 0: name.hashCode ()); result = prime * result + Float.floatToIntBits (hodnotenie); result = prime * result + ((studio == null)? 0: studio.hashCode ()); návratový výsledok; } @Override public boolean equals (Object obj) {if (this == obj) return true; if (obj == null) return false; if (getClass ()! = obj.getClass ()) return false; Movie other = (Movie) obj; if (name == null) {if (other.name! = null) return false; } else if (! name.equals (other.name)) return false; if (Float.floatToIntBits (hodnotenie)! = Float.floatToIntBits (other.rating)) vráti hodnotu false; if (studio == null) {if (other.studio! = null) return false; } else if (! studio.equals (other.studio)) vráti false; návrat pravdivý; } @Override public String toString () {return "Movie [name =" + name + ", studio =" + studio + ", rating =" + hodnotenie + "]"; }}

86 riadkov kódu. To je veľa na uloženie iba troch polí v jednoduchej triede.

4. Kotlinská dátová trieda

Teraz vytvoríme rovnaký Film triedy, s rovnakými funkcionalitami, používajúci Kotlin:

dátová trieda Film (var. názov: String, var štúdio: String, var. hodnotenie: Float)

Ako vidíme, je to podstatne jednoduchšie a čistejšie. Konštruktér, toString (), equals (), hashCode (), a ďalšie copy () a komponenta N () funkcie sa generujú automaticky.

4.1. Využitie

Dátová trieda je inštancovaná rovnakým spôsobom ako iné triedy:

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

Teraz sú k dispozícii vlastnosti a funkcie:

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, hodnotenie = 9,0)

4.2. Funkcia kopírovania

The copy () funkcia je vytvorená v prípade, že potrebujeme skopírovať objekt, ktorý mení niektoré z jeho vlastností, ale zvyšok zostáva nezmenený.

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

Java neposkytuje jasný a natívny spôsob kopírovania / klonovania objektov. Mohli by sme použiť Klonovateľný rozhranie, SerializationUtils.clone () alebo a klonovací konštruktor.

4.3. Vyhlásenia o deštrukturalizácii

Deklarácie o deštrukcii nám umožňujú považovať vlastnosti objektov za jednotlivé hodnoty. Pre každú vlastnosť dátovej triedy out, a komponenta N () je vygenerovaný:

movie.component1 () // názov movie.component2 () // studio movie.component3 () // hodnotenie

Môžeme tiež vytvoriť viac premenných z objektu alebo priamo z funkcie - je potrebné pamätať na používanie zátvoriek:

val (meno, štúdio, hodnotenie) = zábava z filmu getMovieInfo () = film val (namef, studiof, hodnotenief) = getMovieInfo ()

4.4. Požiadavky na dátovú triedu

Aby sme mohli vytvoriť dátovú triedu, musíme splniť nasledujúce požiadavky:

  • Primárny konštruktor musí mať aspoň jeden parameter
  • Všetky parametre primárneho konštruktora musia byť označené ako val alebo var
  • Údajové triedy nemôžu byť abstraktné, otvorené, zapečatené alebo vnútorné
  • (pred 1.1.) Dátové triedy môžu implementovať iba rozhrania

Od 1.1 môžu dátové triedy rozširovať ďalšie triedy.

Ak generovaná trieda potrebuje konštruktor bez parametrov, je potrebné zadať predvolené hodnoty pre všetky vlastnosti:

dátová trieda Film (var name: String = "", var studio: String = "", var hodnotenie: Float = 0F)

5. Záver

V Kotline sme videli dátové triedy, ich použitie a požiadavky, znížené množstvo napísaného štandardného kódu a porovnania s rovnakým kódom v Jave.

Ak sa chcete dozvedieť viac o Kotlinovi, prečítajte si články ako napr Interoperabilita Kotlin Java a už spomínané Úvod do jazyka Kotlin.

Plnú implementáciu týchto príkladov nájdete v našom projekte GitHub.


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