Klassen mit zwei Konstruktoren und Properties

In Kotlin besitzen Klassen einen primären und bei Bedarf weitere sekundäre Konstruktoren. Die Parameter des primären Konstruktors werden hinter dem Schlüsselwort constructor notiert:

Stellenmarkt
  1. IT-Spezialist als Software-Entwickler / Tester (Informatiker, Fachinformatiker, Wirtschaftsinformatiker ... (m/w/d)
    tailor-made software GmbH, deutschlandweit (Home-Office möglich)
  2. IT-Systemadministration (m/w/d) im Referat "ADV, Informations- und Kommunikationstechnik, Statistik" ... (m/w/d)
    Ministerium für Klimaschutz, Umwelt, Energie und Mobilität des Landes Rheinland-Pfalz, Mainz
Detailsuche

  1. class Auto constructor(t: Int) {
  2. // Properties:
  3. val tueren: Int = t
  4. var farbe: String = "Rot"
  5. get() = field.toUpperCase()
  6. set(value) {
  7. field = value.toLowerCase()
  8. }
  9.  
  10. // Primärer Konstruktor:
  11. init {
  12. println("Anzahl Türen: ${tueren}.")
  13. }
  14. // Sekundärer Konstruktor:
  15. constructor(t: Int, f: String) : this(t) { farbe = f }
  16. }
  17.  
  18. fun main(args: Array<String>) {
  19. val audi = Auto(5) // Objekt audi erstellen
  20. audi.farbe = "Blau"
  21. println(audi.farbe)
  22. }

Properties als Objektvariablen

Daten speichert ein Objekt in speziellen Variablen, die Kotlin als Properties bezeichnet. Die Klasse Auto besitzt die zwei Properties tueren und farbe. Sofern der Konstruktor lediglich die Variablen mit Werten füllt, erlaubt Kotlin die Kurzschreibweise

  1. class Auto(val tueren: Int) { ... }.

Das Property tueren erhält dabei automatisch den Wert, den man dem Objekt bei seiner Instanziierung mit auf den Weg gibt. Speichert eine Klasse nur Daten, kann man sie folglich in nur einer Zeile deklarieren:

Golem Akademie
  1. Java EE 8 Komplettkurs: virtueller Fünf-Tage-Workshop
    24.–28. Januar 2022, virtuell
  2. Jira für Anwender: virtueller Ein-Tages-Workshop
    10. November 2021, virtuell
Weitere IT-Trainings

  1. class Person(val name: String, val ort: String)

Stellt man noch ein data voran, ergänzt der Compiler automatisch ein paar nützliche Methoden wie copy() oder equal().

In der Klasse Auto demonstriert das Property farbe den Einsatz von Getter- und Setter-Methoden: Weist man später dem Property einen Wert zu (etwa via audi.farbe = "Blau"), ruft Kotlin automatisch die set()-Funktion auf. Analog führt Kotlin get() beim Zugriff auf die Variable aus. Auf diese Weise kann man die Farbe noch vor der Speicherung beziehungsweise Rückgabe manipulieren. Dabei gibt es allerdings eine Stolperfalle: Würde set() direkt dem Property farbe einen Wert zuweisen (via farbe = value.toLowerCase()), würde set() immer wieder rekursiv aufgerufen. Dies verhindert das Schlüsselwort field, das den Wert in einem sogenannten Backing Field speichert.

Ein Objekt kann Kotlin in mehrere Variablen zerlegen (Destructuring Declarations). In folgendem Beispiel entstehen die Variablen plz und ortsname, welche die Werte aus den Properties des Objekts berlin enthalten:

  1. val (plz, ortsname) = berlin

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Funktional und voll unter KontrolleGenerische Programmierung und Vererbung 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8.  


Proctrap 29. Okt 2017

immer diese Threadschändung

MiBx 18. Okt 2017

Das ist schon ganz gut so, dass Du zurück gewechselt bist, wenn Du Dich nicht wirklich...

Proctrap 17. Okt 2017

kwt

horotab 05. Okt 2017

Wer Methoden schreibt, die so lang sind, mach idR sowieso etwas falsch. Im Idealfall hat...

demonkoryu 04. Okt 2017

Closures sind nicht "hip" sondern eine nützliche Abstraktion, die in den letzten Jahren...



Aktuell auf der Startseite von Golem.de
Chorus im Test
Action im All plus galaktische Grafik

Schicke Grafik und ein sprechendes Raumschiff: Chorus von Deep Silver entpuppt sich beim Test als düsteres und spannendes Weltraumspiel.
Von Peter Steinlechner

Chorus im Test: Action im All plus galaktische Grafik
Artikel
  1. Bald exklusiv bei Disney+: Serien verschwinden aus Abos von Netflix und Prime Video
    Bald exklusiv bei Disney+
    Serien verschwinden aus Abos von Netflix und Prime Video

    Acht Serienklassiker gibt es bald nur noch exklusiv bei Disney+ im Abo. Dazu gehören Futurama, Family Guy und 24.
    Von Ingo Pakalski

  2. Exos X20 und Ironwolf Pro: Seagate baut 20-TByte-Festplatten für NAS und Server
    Exos X20 und Ironwolf Pro
    Seagate baut 20-TByte-Festplatten für NAS und Server

    Sowohl die Seagate Exos X20 als auch die Ironwolf Pro gibt es künftig auch mit 20 TByte. Die HDDs sind für sicheren Storage gedacht.

  3. Edge-Browser: Microsoft will Installation von Chrome verhindern
    Edge-Browser
    Microsoft will Installation von Chrome verhindern

    Microsoft intensiviert sein Vorgehen gegen andere Browser: Vor der Installation von Chrome wird Edge übertrieben gelobt.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • Saturn-Advent: Toshiba Canvio 6TB 88€ • KFA2 Geforce RTX 3070 OC 8GB 1.019€ • Netgear günstiger (u. a. 5-Port-Switch 16,89€) • Norton 360 Deluxe 2022 18,99€ • Gaming-Monitore zu Bestpreisen (u. a. Samsung G3 27" FHD 144Hz 219€) • Spiele günstiger (u. a. Hades PS5 15,99€) [Werbung]
    •  /