c't 16/2017
S. 154
Know-how
Kotlin
Aufmacherbild

Klasse Klassen

Die neue Programmiersprache für Java und mehr, Teil 2

Kotlin verspricht Java-Entwicklern einen Produktivitätsschub. Das liegt vor allem an dem durchdachten Klassen- und Vererbungssystem sowie guten Konzepten für lokale Variablen und Operatoren – ein Überblick.

Um in Kotlin eine Klasse zu definieren, reicht im einfachsten Fall das Schlüsselwort class, gefolgt von einem Namen: class Point. Besonders nützlich ist so eine Klasse natürlich nicht, weshalb dem Klassennamen normalerweise die Parameterliste des Primärkonstruktors folgt: class Point(x: Int, y: Int). Diese Parameter sind im init-Block sichtbar, der in etwa dem Rumpf eines Konstruktors in Java entspricht:

class Point(x: Int, y: Int) {

init {

require(x >= 0)

require(y >= 0)

}

}

Zum Anlegen und Initialisieren von Feldern gibt es eine Abkürzung: Den Konstruktorparametern wird das Schlüsselwort val (nur Lesen) oder var (Lesen und Schreiben) vorangestellt. Der Compiler kümmert sich um den Rest. Für Klassen, die in erster Linie Datenstrukturen sind, reicht deshalb oft schon eine Zeile:

class Point(val x: Int, val y: Int)

Weitere Geschenke vom Compiler gibt es, wenn man data class statt class schreibt, denn dann entstehen automatisch Implementierungen der Methoden equals(), hashCode(), toString(), copy(), component1..n() sowie Properties für die Parameter:

data class Point(val x: Int,

val y: Int)

Die Parameterliste hinter dem Klassennamen ist der Primärkonstruktor. Das Schlüsselwort val vor den Parametern weist den Compiler an, für die Parameter Properties anzulegen, die nur gelesen werden können. Das entspricht in Java einem privaten Feld mit einer öffentlichen Zugriffsmethode wie getX(). Insgesamt wäre ein vergleichbares Stück Code in Java ungefähr 50 Zeilen lang.