Scala入门--单例对象object

Posted 后端技术前瞻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala入门--单例对象object相关的知识,希望对你有一定的参考价值。

scala 中的单例对象何java 中的静态对象提供相同的功能,单例对象中的字段和方法都是静态的

只要定义了单例对象,不需要进行实例化就可以进行使用其中的成员字段、方法;

例如:

object Person { private var lastId=0 //一个人的身份编号 def newPerson()={ lastId+=1 lastId }}
object App{ def main(args: Array[String]): Unit = { println(Person.newPerson()) //输出结果 1 println(Person.newPerson()) //输出结果 2 }}


单例对象分为:

伴生对象:同一个代码文件中,拥有两个相同名的object 和 class

                 则互为伴生关系。单例对象与同类名对象则可以访问对方内部的成员

孤立对象:  一个代码文件没有与只同名class 的object 对象;

class Person(val name:String){ private val id = Person.newPerson()// 调用了伴生对象中的方法 def info(): Unit ={ printf("The id of %s is %d.\n",name,id) }}
object Person { private var lastId=0 //一个人的身份编号 def newPerson()={ lastId+=1 lastId }}


对象apply() 方法

类似:

val myStrArr = Array("BigData","Hadoop","Spark")//Scala 会自动调用Array这个类的伴生对象的apply方法


apply 方法调用约定

用括号传递给类实例或单例对象名一个或多个参数时

Scala 会在相应的类或对象中查找方法名为apply且 参数列表与传入的参数一致的方法

并用传入的参数来调用该apply 方法

class TestApplyClass { def apply(param:String) { println("apply method called: "+param) }}
object Test{ def main(args: Array[String]): Unit = { val myObject = new TestApplyClass myObject("Hello Apply1")//apply method called: Hello Apply1 myObject.apply("Hello Apply2")//apply method called: Hello Apply2 }}


1、一个 class 一个类

2、给类定义一个伴生对象

3、类的构造方法以apply方法的形式写在伴生对象中

4、伴生对象的方法会被自动调用

5、调用会自动生成类对象

class Car(name:String) { def info(): Unit ={ println("Car name is"+name) }}object Car{ def apply(name: String): Car = new Car(name)}object MyTestApply{ def main(args: Array[String]): Unit = { val myCar = Car("BMW") myCar.info()//输出结果为:Car name isBMW }}


对象 update 方法

val myStrArr = new Array[String](3)myStrArr(0) = "BigData" //实际上调用了伴生类Array中的update 方法,执行myStrArr.update(0,"BigData")


unapply() 方法:

unapply方法是对对象属性反向解构的过程

class Car(val brand:String,val price:Int){ def info(): Unit ={ println("Car brand is"+brand+"and price is"+price) }}object Car{ def apply(brand:String,price:Int)={ println("Debug:calling apply...") new Car(brand,price) } def unapply(c: Car): Option[(String, Int)] = { println("Debug:calling unapply...") Some(c.brand,c.price)//将属性解析出来 }}object TestUnapply { def main(args: Array[String]): Unit = { var Car(carbrand,carprice) = Car("BMW",800000) // 输出结果://Debug:calling apply... //Debug:calling unapply... //brand:BMW and carprice:800000 println("brand:"+carbrand+" and carprice:"+carprice) }}



以上是关于Scala入门--单例对象object的主要内容,如果未能解决你的问题,请参考以下文章

2021年大数据常用语言Scala(二十九):scala面向对象 单例对象

scala Object

scala Object

Scala学习 -- 单例对象

13.scala的单例对象

Scala入门系列:面向对象之object