Die Methode apply

Einen besonderen Status hat eine Methode mit dem Namen apply. Werden hinter einem Klassennamen runde Klammern verwendet, bedeutet dies, das eine Methode mit dem Namen apply auf dem Begleitobjekt (engl. companion object) aufgerufen wird. Die Methode kann Parameterlos oder mit Parametern versehen sein. Setzen wir die Klammern hinter einer Instanzvariablen, so bedeutet dies, dass die apply Methode der entsprechenden Klasse aufgerufen wird.

Ein Beispiel mit einer List soll diese Methodik verdeutlichen:

val a = List(1,2,3)
println(a(1))
            

Das obige Beispiel ist eine Kurzschreibweise für nachfolgende Quelltextzeilen:

val a = List.apply(1,2,3)
println(a.apply(1))
            

Die Funktionsweise von apply ist nicht auf Klassen der Standardbibliothek beschränkt, sondern funktioniert auch für alle selbstdefinierten case classes.

object MyApply{
  def apply() = new MyApply(0)
}

case class MyApply(v1 : Int) {
  override def toString = "My value is "+v1
  
  def apply(v2 : Int) = v1 + v2
}

object MyApplyTest {

  def main(args: Array[String]) {
    val t = MyApply(3)
    println(t(3))
  }
}
itmapa.de - X2H V 0.10

Im nachfolgenden Beispiel definieren wir eine apply Methode im Companion Objekt und in der Companion Klasse. Im Hauptprogramm erzeugen wir ein Objekt durch Anwendung der apply Mthode im Companion Objekt und ermitteln anschließend den auszugebenden Wert mit der apply Methode der Companion Klasse.

object Check{
  
  def main(args: Array[String]): Unit = {
    val check = A()
    println(check())
  }
}

object A {
  def apply() = new A(3)
}

class A (val intValue: Int) {
  def apply() = intValue
}
itmapa.de - X2H V 0.20