Adatosztályok Kotlinban

1. Áttekintés

A Kotlin nyelv bemutatja az Adatosztályok fogalmát, amelyek az adattárolóként használt egyszerű osztályokat képviselik, és nem foglalnak magukba további logikákat. Egyszerűen fogalmazva: a Kotlin megoldása lehetővé teszi számunkra, hogy elkerüljük a sok kazán kód írását.

Ebben a rövid cikkben megnézzük a Kotlini adatosztályokat, és összehasonlítjuk őket Java társaikkal.

2. Kotlin Setup

A Kotlin projekt felállításának megkezdéséhez ellenőrizze a bevezetés a Kotlin nyelvbe bemutató.

3. Adatosztályok Java-ban

Ha létrehozni akarnánk a Film bejegyzés Java-ban, sok kazán kódot kell írnunk:

public class Film {private String name; saját vonós stúdió; privát úszó minősítés; public Movie (Karakter neve, Vonós stúdió, úszó minősítés) {this.name = név; ez.stúdió = stúdió; this.rating = minősítés; } public String getName () {visszatérési név; } public void setName (karakterlánc neve) {this.name = név; } public String getStudio () {visszatérő stúdió; } public void setStudio (Vonós stúdió) {this.studio = studio; } public float getRating () {return rating; } public void setRating (float rating) {this.rating = minősítés; } @Orride public int hashCode () {final int prime = 31; int eredmény = 1; eredmény = elsődleges * eredmény + ((név == null)? 0: név.hashCode ()); eredmény = elsődleges * eredmény + Float.floatToIntBits (minősítés); eredmény = fő * eredmény + ((stúdió == null)? 0: stúdió.hashCode ()); visszatérési eredmény; } @Orride public boolean equals (Object obj) {if (this == obj) return true; if (obj == null) false értéket ad vissza; if (getClass ()! = obj.getClass ()) false értéket ad vissza; Film egyéb = (Film) obj; if (név == null) {if (más.név! = null) hamis értéket ad vissza; } else, ha (! név.egyenlő (egyéb.név)) hamis értéket ad vissza; ha (Float.floatToIntBits (minősítés)! = Float.floatToIntBits (egyéb.értékelés)) hamis értéket ad vissza; if (studio == null) {if (other.studio! = null) false-t ad vissza; } else if (! studio.equals (other.studio)) false-t ad vissza; return true; } @Orride public String toString () {return "Film [név =" + név + ", stúdió =" + stúdió + ", minősítés =" + értékelés + "]"; }}

86 kódsor. Ez sok, ha csak három mezőt tárolunk egy egyszerű osztályban.

4. Kotlin adatosztály

Most létrehozunk ugyanaz Film osztály, ugyanazokkal a funkciókkal, a Kotlin használatával:

adatosztály Film (változó neve: String, var stúdió: String, var értékelés: Float)

Mint láthatjuk, ez tömegesen könnyebb és tisztább. Konstruktőr, toString (), egyenlő (), hashCode (), és további másolat() és komponensN () A funkciók automatikusan generálódnak.

4.1. Használat

Az adatosztályokat ugyanúgy példányosítják, mint a többi osztályt:

film = Film ("Whiplash", "Sony Pictures", 8.5F)

Most elérhetők a tulajdonságai és funkciói:

println (film.név) // Whiplash println (movie.studio) // Sony Pictures println (movie.rating) //8.5 movie.rating = 9F println (movie.toString ()) // Movie (name = Whiplash, studio) = Sony Pictures, értékelés = 9,0)

4.2. Másolás funkció

A másolat() függvény jön létre abban az esetben, ha egy objektumot át kell másolnunk, megváltoztatva annak néhány tulajdonságát, de a többit változatlanul megtartva.

val betterRating = film.copy (besorolás = 9.5F) println (betterRating.toString ()) // Movie (név = Whiplash, studio = Sony Pictures, minősítés = 9.5) 

A Java nem nyújt világos, natív módszert az objektumok másolására / klónozására. Használhatnánk a Klónozható felület, SerializationUtils.clone () vagy a klónozó konstruktor.

4.3. Szerkezetátalakítási nyilatkozatok

A szerkezetátalakítási nyilatkozatok lehetővé teszik számunkra, hogy az objektumok tulajdonságait egyedi értékként kezeljük. Az out adatosztályba tartozó minden tulajdonság esetében a komponensN () generálódik:

movie.component1 () // név movie.component2 () // studio movie.component3 () // rating

Több változót is létrehozhatunk az objektumból vagy közvetlenül egy függvényből - fontos megjegyezni a zárójelek használatát:

val (név, stúdió, értékelés) = film szórakozás getMovieInfo () = film val (namef, studiof, ratingf) = getMovieInfo ()

4.4. Adatosztály követelmények

Adatosztály létrehozásához a következő követelményeket kell teljesítenünk:

  • Az elsődleges konstruktornak legalább egy paraméterrel kell rendelkeznie
  • Minden elsődleges konstruktor paramétert meg kell jelölni val vagy var
  • Az adatosztályok nem lehetnek absztrakt, nyitott, lezárt vagy belső
  • (1.1. előtt) Az adatosztályok csak interfészeket valósíthatnak meg

1.1 óta az adatosztályok kiterjeszthetnek más osztályokat is.

Ha a létrehozott osztálynak paraméter nélküli konstruktorral kell rendelkeznie, akkor meg kell adni az összes tulajdonság alapértelmezett értékét:

adatosztály Film (var név: String = "", var stúdió: String = "", var értékelés: Float = 0F)

5. Következtetés

Láttunk Kotlin adatosztályait, azok használatát és követelményeit, a kazánlap kódjának csökkentett mennyiségét és az összehasonlításokat ugyanazon Java kóddal.

Ha többet szeretne megtudni Kotlinról, ellenőrizze az olyan cikkeket, mint pl Kotlin Java interoperabilitás és a már említett Bevezetés a Kotlin nyelvbe.

Ezeknek a példáknak a teljes megvalósítása megtalálható a GitHub projektünkben.