Dataklassen in Kotlin

1. Overzicht

De Kotlin-taal introduceert het concept van dataklassen, die eenvoudige klassen vertegenwoordigen die als datacontainers worden gebruikt en geen extra logica bevatten. Simpel gezegd, de oplossing van Kotlin stelt ons in staat om te voorkomen dat we veel standaardcode schrijven.

In dit korte artikel zullen we dataklassen in Kotlin bekijken en deze vergelijken met hun Java-tegenhangers.

2. Kotlin instellen

Bekijk onze om te beginnen met het opzetten van het Kotlin-project inleiding tot de Kotlin-taal tutorial.

3. Dataklassen in Java

Als we een Film binnenkomst in Java, zouden we veel boilerplate-code moeten schrijven:

public class Movie {private String naam; privé String studio; private float rating; openbare film (tekenreeksnaam, tekenreeksstudio, zwevende beoordeling) {this.name = naam; this.studio = studio; this.rating = rating; } public String getName () {retournaam; } public void setName (String naam) {this.name = naam; } public String getStudio () {return studio; } 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 resultaat = 1; result = prime * resultaat + ((name == null)? 0: name.hashCode ()); result = prime * resultaat + Float.floatToIntBits (beoordeling); result = prime * resultaat + ((studio == null)? 0: studio.hashCode ()); resultaat teruggeven; } @Override public boolean equals (Object obj) {if (this == obj) retourneert 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 (rating)! = Float.floatToIntBits (other.rating)) return false; if (studio == null) {if (other.studio! = null) return false; } else if (! studio.equals (other.studio)) retourneert false; terugkeer waar; } @Override public String toString () {return "Movie [name =" + name + ", studio =" + studio + ", rating =" + rating + "]"; }}

86 regels code. Dat is veel om slechts drie velden in een eenvoudige klasse op te slaan.

4. Kotlin-gegevensklasse

Nu gaan we creëren hetzelfde Film class, met dezelfde functionaliteiten, met behulp van Kotlin:

dataklasse Movie (var name: String, var studio: String, var rating: Float)

Zoals we kunnen zien, is dat enorm eenvoudiger en schoner. Constructeur, toString (), equals (), hashCode (), en extra kopiëren() en componentN () functies worden automatisch gegenereerd.

4.1. Gebruik

Een dataklasse wordt op dezelfde manier geïnstantieerd als andere klassen:

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

Nu zijn de eigenschappen en functies van beschikbaar:

println (movie.name) // Whiplash println (movie.studio) // Sony Pictures println (movie.rating) //8.5 movie.rating = 9F println (movie.toString ()) // Movie (naam = Whiplash, studio = Sony Pictures, beoordeling = 9,0)

4.2. Kopieerfunctie

De kopiëren() functie wordt gemaakt, voor het geval dat we een object moeten kopiëren door enkele van zijn eigenschappen te wijzigen, maar de rest ongewijzigd te houden.

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

Java biedt geen duidelijke, native manier om objecten te kopiëren / klonen. We kunnen de Klonen koppel, SerializationUtils.clone () of een klonen constructor.

4.3. Verklaringen betreffende vernietiging

Met vernietigingsverklaringen kunnen we objecteigenschappen als individuele waarden behandelen. Voor elke eigenschap in de dataklasse, een componentN () is gegenereerd:

movie.component1 () // naam movie.component2 () // studiofilm.component3 () // beoordeling

We kunnen ook meerdere variabelen maken vanuit het object of rechtstreeks vanuit een functie - het is belangrijk om te onthouden hoe u haakjes moet gebruiken:

val (naam, studio, beoordeling) = filmplezier getMovieInfo () = filmval (naam, studiof, ratingf) = getMovieInfo ()

4.4. Vereisten voor dataklassen

Om een ​​dataklasse te maken, moeten we aan de volgende vereisten voldoen:

  • De primaire constructor moet ten minste één parameter hebben
  • Alle primaire constructorparameters moeten worden gemarkeerd als val of var
  • Dataklassen kunnen niet abstract, open, verzegeld of innerlijk zijn
  • (vóór 1.1.) Dataklassen mogen alleen interfaces implementeren

Sinds 1.1 kunnen dataklassen andere klassen uitbreiden.

Als de gegenereerde klasse een constructor zonder parameters moet hebben, moeten de standaardwaarden voor alle eigenschappen worden opgegeven:

dataklasse Movie (var name: String = "", var studio: String = "", var rating: Float = 0F)

5. Conclusie

We hebben dataklassen in Kotlin gezien, hun gebruik en vereisten, de verminderde hoeveelheid geschreven standaardcode en vergelijkingen met dezelfde code in Java.

Als je meer wilt weten over Kotlin, bekijk dan artikelen zoals Kotlin Java-interoperabiliteit en het reeds genoemde Inleiding tot de Kotlin-taal.

De volledige implementatie van deze voorbeelden is te vinden in ons GitHub-project.


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