© S&S Media Group
Kotlin kompakt - Teil 5

Properties in Kotlin-Klassen


Properties in Klassen

Klassen in Kotlin verfügen über Properties mit impliziten und bei Bedarf automatisch generierten Gettern und Settern.

Der Aufruf dieser Getter und Setter unterscheidet sich nicht von einem direkten Feld-Zugriff in Java.

Eine häufige Quelle für überflüssigen Boilerplate Code in Java sind Getter und Setter für die Felder einer Klasse:

public class Pet { private String name; private Person owner; public Pet(String name, Person owner) { this.name = name; this.owner = owner; } // ab hier nur noch Boilerplate public String getName() { return name; } public void setName(String name) { this.name = name; } public Person getOwner() { return owner; } public void setOwner(Person owner) { this.owner = owner; } } 

Natürlich könnte man auch einfach die Felder name und owner auf public setzen und auf die Getter und Setter verzichten. Damit würde man den Boilerplate Code los, und auch der Zugriff auf die Felder wäre eleganter:

pet.name = "Tomcat"; // statt pet.setName("Tomcat"); 

Während das in diesem Beispiel kein Problem wäre, insbesondere für name, könnte das für owner im Laufe des Projektes schnell zu einem solchen werden: Stell dir vor, nicht nur das Pet soll seinen owner kennen, sondern eine Person soll zukünftig auch eine Liste all ihrer Pets verwalten.

Dazu müsste man dann doch einen entsprechenden Setter schreiben:

public void setOwner(Person owner) { this.owner = owner; owner.pets.add(this); } 

Das ist noch schnell erledigt. Aufwändiger und lästiger ist es nun jedoch, alle direkten Zugriffe auf owner durch einen Aufruf des neuen Setters zu ersetzen. Zwar bieten alle modernen IDEs entsprechende Refactorings an, die das vollautomatisch erledigen, trotzdem bleibt der fade Beigeschmack, unter Umständen viele Quelldateien wegen solch einer kleinen Änderung anfassen zu müssen.

Um diese Situationen schon von vorneherein zu vermeiden und der obligatorischen Kapselung in der objektorientierten Programmierung Rechnung zu tragen, ist es in Java die Regel immer mit Gettern und Settern zu arbeiten und mit dem Boilerplate Code zu leben (oder ihn mit Tools wie Lombok zu kaschieren). Verbunden mit dem Verzicht auf die eigentlich elegantere Syntax des direkten Feldzugriffs.

Kotlin kann's besser

Doch mit Kotlin verbessert sich dieser Missstand ganz entscheidend!

Die obige Pet-Klasse könnte in Kotlin so aussehen:

class Pet(name: String, owner: Person) { var name: String = name var owner: Person = owner } 

oder, mit Constructor Properties, noch kürzer (jedoch f...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang