Kotlin Datenklasse

Aug 12, 2020


Boilerplate. Eines unserer größten Kopfschmerzen. Es ist gleichauf mit der ungarischen Notation. Ich zeige Ihnen, wovon wir sprechen, und erstelle eine Klasse Client (natürlich ist das Wortspiel beabsichtigt).

Versuchen wir, diese Klasse sicher in der Anwendung, frei von Nebeneffekten und unveränderlich zu machen. Wie in Punkt 15 Effektives Java beschrieben: "Klassen sollten unveränderlich sein, es sei denn, es gibt einen sehr guten Grund, sie veränderbar zu machen."

final class Client { private final String name; private final String address; private final int age; public Client(String name, String address, int age) { this.name = name; this.address = address; this.age = age; } public String getName() { return name; } public String getAddress() { return address; } public int getAge() { return age; }  
}

Bei Klassen müssen wir sie oft in Collections speichern, und um das korrekt zu tun, müssen wir eine korrekte Implementierung der Funktionen equals undlowin folg Item 9 von Effective Java, der hashCode-Funktion, bereitstellen. Unveränderliche Wertobjekte sind in Java sehr mühsam zu erstellen, und zwar genau aus diesem Grund.

@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Client client = (Client) o; return age == client.age && Objects.equals(name, client.name) && Objects.equals(address, client.address); } @Override public int hashCode() { return Objects.hash(name, address, age); }

Manchmal wollen wir auch toString für Klassen aufrufen und eine sinnvolle Rückgabe von dieser Methode erhalten, nicht nur die Adresse der Klasse. In Punkt 12 sagt Joshua: "Wenn es praktisch ist, sollte die toString-Methode alle interessanten Informationen zurückgeben, die in dem Objekt enthalten sind." Fügen wir auch das hinzu:

@Override public String toString() { return "Kunde [Name=" + Name + ", Adresse=" + Adresse + ", Alter=" + Alter + "]"; }

Falls jemand mitzählen möchte: Diese einfache Klasse umfasst 45376 Zeilen Code. Oh, wir haben vergessen, eine Telefonnummer hinzuzufügen... Und jetzt müssen wir auch noch die Funktionen ändern.

Kann Kotlin das besser? hmm, mal sehen.

data class Client(val name: String, val address: String, val age : Int)

In der Tat, es kann! Und das in nur einer Zeile!

Unter der Haube stellt uns der Compiler die Methoden hashCode(), equals(), toString() zur Verfügung.

Treten Sie ein in die Welt, in der eine Programmiersprache nicht nur die Verantwortung für die Reduzierung von Boilerplate übernimmt, sondern dabei auch einige wichtige Prinzipien aus der Java-Bibel befolgt.

Tanja Zlatanovska

Tanja Zlatanovska

Buchen Sie eine kostenlose Beratung

Wählen Sie Ihre Branche*

Bitte wählen Sie Ihre Branche*

Wählen Sie Ihren Servicetyp

Bitte wählen Sie Ihren Servicetyp

calendarWann passt es Ihnen am besten für ein kurzes Gespräch

Die mit * gekennzeichneten Felder sind Pflichtfelder

Alle Beiträge anzeigen