Verzögerte Initialisierung

Im „Abstrakte und konkrete Felder in Traits überschreiben“ haben wir verschiedene Szenarien präsentiert, in denen die Reihenfolge der Initialisierung von Feldern im Zusammenhang mit dem Überschreiben problematisch sein kann. Dabei haben wir eine Lösung behandelt: die vorinitialisierten Felder. Nun wollen wir auf die andere Lösung eingehen, die wir zuvor erwähnt haben: als lazy (träge) deklarierte Werte, die erst bei Bedarf initialisiert werden.

Hier ist dasselbe Beispiel, diesmal mit einem lazy val:

// code-examples/FP/overrides/trait-lazy-init-val-script.scala

trait AbstractT2 {
  println("In AbstractT2:")
  val value: Int
  lazy val inverse = { println("initializing inverse:"); 1.0/value }
  //println("AbstractT2: value ...

Get Programmieren mit Scala now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.