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.