Introduzione alle Data classes in Kotlin

Mattepuffo's logo
Introduzione alle Data classes in Kotlin

Introduzione alle Data classes in Kotlin

Le Data classes in Kotlin sono classi che vengono usate solo come contenitori di dati.

Possiamo paraganorarle ai classici JavaBean, con una differenza enorme sulla sintassi.

Prendiamo un esempio banale, cominciando proprio con Java:

public class PersonJava {
    private String name;
    private String email;
    private int age;

    public PersonJava(String name, String email, int age) {
        this.name = name;
        this.email = email;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        PersonJava that = (PersonJava) o;

        if (age != that.age) return false;
        if (name != null ? !name.equals(that.name) 
: that.name != null) return false;
        return email != null ? email.equals(that.email) : that.email == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + (email != null ? email.hashCode() : 0);
        result = 31 * result + age;
        return result;
    }

    @Override
    public String toString() {
        return "PersonJava{" +
                "name='" + name + ''' +
                ", email='" + email + ''' +
                ", age=" + age +
                '}';
    }
}

Una classe con solo tre campi; non so se notate la lunghezza del codice, tra i vari getter/setter, ecc.

Vediamo la stessa identica classe in Kotlin:

data class Person(val name: String, val email: String, val age: Int)

Fine, basta aggiungere la parola chiave data.

Vediamo cosa succede quando richiamiamo la classe:

fun main(args: Array) {
    val person: Person = Person("matteo", "mp@email.com", 28)
    println(person.name)
    println(person.toString())
}

Abbiamo anche richiamato il metodo toString, senza farne l'override come in Java, con questo bel risultato:

matteo
Person(name=matteo, email=mp@email.com, age=28)

Direi spettacolare!

Provate a levare la parola data e rilanciare l'esempio:

matteo
com.kotlin.test.Person@610455d6

Come vedete il risultato è completamente diverso.

Ovviamente possiamo fare molto di più con queste classi:

  • impostare alcuni campi come read-only
  • copiare i l'oggetto in nuovo oggetto
  • destrutturare l'oggetto
  • ecc

Questo il link della documentazione ufficiale, così potete approfondire!

Enjoy!


Condividi

Commentami!