Objetos complementarios en Scala
Este tutorial analizará los objetos complementarios con ejemplos en ejecución en Scala.
Objetos complementarios en Scala
Un objeto complementario es un objeto con el mismo nombre que la clase y se declara en un archivo similar a una clase.
Por ejemplo, si tenemos un objeto Color
con el mismo nombre que el nombre de la clase y el archivo se guarda como Color.scala
, este objeto se considerará un objeto complementario en Scala.
Ejemplo:
class Color {
}
object Color {
}
// Color.scala
El beneficio de usar un objeto complementario es que tanto la clase como el objeto ahora pueden acceder a los miembros privados del otro. Scala no usa el concepto estático, pero podemos usar los objetos complementarios para recopilar un concepto similar.
Crear objetos sin utilizar la palabra clave nueva
Agregar un método aplicar ()
a un objeto complementario nos permite crear objetos sin usar la palabra clave nuevo
.
Ejemplo:
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)
}
}
Producción :
Red
Deconstruir la instancia de una clase
De manera similar, podemos usar el método unapply()
para deconstruir la instancia de la clase. Obtenemos un error si intentamos acceder a sus miembros después de la función unapply()
.
Ejemplo:
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)
}
}
Producción :
error: Color.type does not take parameters
val color = Color("Red")
^