Begleitobjekte in Scala

Mohammad Irfan 21 Juni 2023
Begleitobjekte in Scala

In diesem Tutorial werden die Companion-Objekte mit laufenden Beispielen in Scala erläutert.

Begleitobjekte in Scala

Ein Begleitobjekt ist ein Objekt mit demselben Namen wie die Klasse und wird in einer ähnlichen Datei als Klasse deklariert.

Wenn wir beispielsweise ein Color-Objekt mit demselben Namen wie der Klassenname haben und die Datei als Color.scala gespeichert wird, wird dieses Objekt in Scala als Begleitobjekt betrachtet.

Beispiel:

class Color {
}
object Color {
}
// Color.scala

Der Vorteil der Verwendung eines Companion-Objekts besteht darin, dass nun sowohl die Klasse als auch das Objekt auf die privaten Mitglieder des jeweils anderen zugreifen können. Scala verwendet das statische Konzept nicht, aber wir können die Begleitobjekte zum Sammeln für ein ähnliches Konzept verwenden.

Erstellen Sie Objekte, ohne das Schlüsselwort new zu verwenden

Durch das Hinzufügen einer apply()-Methode zu einem Companion-Objekt können wir Objekte erstellen, ohne das Schlüsselwort new zu verwenden.

Beispiel:

class Color(val name: String){
    private  var _defaultname: String = "White"
     def get():String = _defaultname
}

object Color {
  def apply(name: String): Color = new Color(name)
}

object MyClass {

    def main(args: Array[String]) {
        val color = Color("Red")
        println(color.name)
    }
}

Ausgang:

Red

Dekonstruieren Sie die Instanz einer Klasse

Ebenso können wir die Methode unapply() verwenden, um die Instanz der Klasse zu dekonstruieren. Wir erhalten einen Fehler, wenn wir versuchen, nach der Funktion unapply() auf seine Mitglieder zuzugreifen.

Beispiel:

class Color(val name: String){
    private  var _defaultname: String = "White"
     def get():String = _defaultname
}

object Color { // unapply function
  def unapply(name: String): Color = new Color(name)
}

object MyClass {

    def main(args: Array[String]) {
        val color = Color("Red")
        println(color.name)
    }
}

Ausgang:

error: Color.type does not take parameters
        val color = Color("Red")
                         ^